优雅的方式强制客户端浏览器重新下载我们的asp.net Web应用程序的.css和.js文件(不完全禁用缓存)

时间:2013-07-13 03:56:21

标签: javascript asp.net css caching iis

我们的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

但肯定有比这更合理的解决方案......?

2 个答案:

答案 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导入文件名。

每次进行新的部署时,资源都会有一个新的统一路径,这对于浏览器来说是唯一的,因此它会重新加载。