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

问题描述 投票:0回答:3

我们的 asp.net Web 应用程序允许客户端浏览器缓存我们的(大型).css 和 .js 文件,以获得更快的性能。

但是每当我们部署新版本时,我们都会接到用户的电话,询问页面看起来很混乱并且充满了 JavaScript 错误。事实证明,他们的浏览器没有重新下载更改后的 .css 和 .js 文件。 Ctrl-F5 总是可以修复它。

有没有办法在升级部署后强制重新下载,而不将其设置为不缓存(从而减慢我们的应用程序速度)?

我发现了这一点(每次部署时手动更改对每个文件的引用): 如何强制给定文件在缓存中过期?

还有这个(同样的事情,但每个页面加载时都会计算校验和): 需要有关如何实现 js/css 版本控制的建议

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

javascript asp.net css caching iis
3个回答
4
投票

在文件中设置版本号对我们来说效果很好:

<script type="text/javascript" src="somefile.js?v=1.0"></script>

只要您每次“发布”更改版本号,浏览器就会认为它是一个新文件。

您可以通过简单地在全局文件(例如配置文件或其他文件)中包含版本号,然后在您希望的每个脚本/CSS 标签上设置变量来完成此操作。


0
投票

最好的方法是在文件名中使用版本控制。如果您使用的是 SVN、Microsoft Team Foundation 等代码版本控制,那么您可以使用上次签入号码作为文件名的后缀,例如,假设当前签入号码是 1321(或者您也可以使用时间戳 yyyy- mm-dd-hh-mm2015-01-15-17-15

因此 somefile.js 将变成 somefile_v1321.js 或者 somefile.js 将变成 somefile_v2015-01-15-17-15.js

现在您会想知道这里发生了这么多文件名更改。答案是,如果你的发布非常频繁,那么可以考虑使用像 Ant 脚本这样的脚本语言,它可以更改发布文件中的 JS 和 CSS 导入文件名。

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


0
投票

您现在可以将

asp-append-version="true"
附加到 或 标签以自动解决您的问题。

<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />

<script src="~/js/index.js" type="text/javascript" asp-append-version="true"></script>

解释用法的短文

微软参考

© www.soinside.com 2019 - 2024. All rights reserved.