我们的asp.net Web应用程序允许客户端浏览器缓存我们的(大).css和.js文件,以提高性能。
但是,每当我们部署新版本时,我们都会收到用户打来的电话,告知该页面看起来如何混乱并且充满了javascript错误。事实证明,他们的浏览器没有重新下载更改的.css和.js文件。 Ctrl-F5始终修复它。
有没有办法在升级部署后强制重新下载,而不设置它不缓存(从而减慢我们的应用程序速度)?
我发现了这一点(每次部署时手动更改对每个文件的引用): How do I force a given file to expire in the cache?
和这个(每个页面加载的校验和计算相同): Needed advice on how to implement js/css versioning
但肯定有比这更合理的解决方案......?
答案 0 :(得分:3)
在文件中设置版本号对我们很有用:
<script type="text/javascript" src="somefile.js?v=1.0"></script>
只要您更改每个“发布”的版本号,浏览器就会认为它是一个新文件。
您可以通过在全局文件(例如配置文件或其他内容)中使用版本号然后在您希望的每个脚本/ css标记上设置变量来实现此目的。
答案 1 :(得分:0)
最好的方法是在文件名中使用版本控制。如果您使用的是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导入文件名。