【问题标题】:Cache busting: append query string or rename file?缓存破坏:附加查询字符串或重命名文件?
【发布时间】:2015-12-11 18:05:32
【问题描述】:
当我们尝试破坏静态资产缓存时,有两种常用方法:
通过附加查询字符串,如assets/file.ext?v=123abc
通过重命名文件,如assets/file.123abc.ext
但是经过几天的搜索,我发现大多数构建工具都喜欢重命名文件,例如gulp-rev。在我看来,这种修订会在服务器上生成大量文件块:
assets
|_ file.a.ext
|_ file.b.ext
|_ file.c.ext
|_ file.d.ext
|...
对此有什么想法吗?
【问题讨论】:
标签:
caching
gulp
frontend
【解决方案1】:
经过几天的搜索,我发现了一些有趣的查询字符串解决方案(assets/file.ext?v=123abc):
如果我们使用 CDN 服务静态资产,动态页面和静态资产是分开托管的。一旦我们要发布一个新版本的应用,就会发生冲突:应该先更新哪部分资源?
页面优先。如果用户在您更新动态页面后立即访问您的网站,则资产指向新版本,例如assets/file.ext?v=456def,然后浏览器下载旧资产并将其缓存为新版本,不幸的是这些用户永远无法获得正确的资源。
资产优先。假设有一些新用户在新版本资产发布后立即访问您的网站,旧页面和新脚本,啊哈!可能会出现一些致命错误,您的网站会变得很糟糕!
所以这里来了重命名文件的解决方案(assets/file.123abc.ext)。不同版本的文件命名不同,因此它们不会相互覆盖。因此,我们先更新资产,然后更新页面,一切都按预期进行,哇哦!
更多详情请阅读这篇文章(中文):https://www.zhihu.com/question/20790576/answer/32602154