一种方法是使用HTTP头消息,指定浏览器不得缓存(或者指定一个较短的缓存时间)。
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
但是,这样一来,浏览器每次访问都要下载相关文件,会增加宽带消耗,也不利于性能。
更常见的解决方法是,为每个静态文件的URL附加一个版本号或哈希作为查询字符串。文件每次更新,就更新一个版本号。
<link rel="stylesheet" href="a.css?v=1.0.1"/>
但是这种方法对于多个静态文件相互依赖的页面会产生问题。
因为HTML页面和静态资源文件往往不会同步部署上线。一旦新版的静态资源文件先上线,同时此时又有用户去加载老版本的HTML页面,就可能导致问题。
因此,更好的解决方法是。每当静态资源文件有内容变化,就改用一个全新的文件名。
<link rel="stylesheet" href="a.v1.0.1.css"/>
这样就会使得HTML页面和静态资源的版本总是匹配的,再配上灰度发布,就能实现平滑发布。
网友评论