我们的 asp.net Web 应用程序允许客户端浏览器缓存我们的(大型).css 和 .js 文件,以获得更快的性能。
但是每当我们部署新版本时,我们都会接到用户的电话,询问页面看起来很混乱并且充满了 JavaScript 错误。事实证明,他们的浏览器没有重新下载更改后的 .css 和 .js 文件。 Ctrl-F5 总是可以修复它。
有没有办法在升级部署后强制重新下载,而不将其设置为不缓存(从而减慢我们的应用程序速度)?
我发现了这一点(每次部署时手动更改对每个文件的引用): 如何强制给定文件在缓存中过期?
还有这个(同样的事情,但每个页面加载时都会计算校验和): 需要有关如何实现 js/css 版本控制的建议
但肯定还有比这更合理的解决方案......?
在文件中设置版本号对我们来说效果很好:
<script type="text/javascript" src="somefile.js?v=1.0"></script>
只要您每次“发布”更改版本号,浏览器就会认为它是一个新文件。
您可以通过简单地在全局文件(例如配置文件或其他文件)中包含版本号,然后在您希望的每个脚本/CSS 标签上设置变量来完成此操作。
最好的方法是在文件名中使用版本控制。如果您使用的是 SVN、Microsoft Team Foundation 等代码版本控制,那么您可以使用上次签入号码作为文件名的后缀,例如,假设当前签入号码是 1321(或者您也可以使用时间戳 yyyy- mm-dd-hh-mm即2015-01-15-17-15)
因此 somefile.js 将变成 somefile_v1321.js 或者 somefile.js 将变成 somefile_v2015-01-15-17-15.js
现在您会想知道这里发生了这么多文件名更改。答案是,如果你的发布非常频繁,那么可以考虑使用像 Ant 脚本这样的脚本语言,它可以更改发布文件中的 JS 和 CSS 导入文件名。