如何强制客户端刷新 JavaScript 文件?

2022-08-29 22:36:30

我们目前正在进行私人测试版,因此仍在进行相当快速的更改,尽管显然随着使用量开始增加,我们将放慢此过程。话虽如此,我们遇到的一个问题是,在使用新的JavaScript文件推送更新后,客户端浏览器仍然使用文件的缓存版本,并且看不到更新。显然,在支持电话中,我们可以简单地通知他们进行刷新以确保他们从服务器获取最新文件,但最好在此之前处理此问题。ctrlF5

我们目前的想法是简单地将版本号附加到JavaScript文件的名称上,然后在进行更改时,递增脚本上的版本并更新所有引用。这肯定会完成工作,但是更新每个版本上的引用可能会变得很麻烦。

由于我确信我们不是第一个处理这个问题的人,我想我会把它扔给社区。您如何确保客户端在您更新代码时更新其缓存?如果您使用的是上述方法,是否正在使用简化更改的过程?


答案 1

据我所知,一个常见的解决方案是将 a 添加到脚本的 src 链接中。?<version>

例如:

<script type="text/javascript" src="myfile.js?1500"></script>

在这一点上,我假设没有比查找替换更好的方法来增加所有脚本标记中的这些“版本号”?

您可能有一个版本控制系统为您执行此操作?例如,大多数版本控制系统都有一种方法可以在签入时自动注入修订版号。

它看起来像这样:

<script type="text/javascript" src="myfile.js?$$REVISION$$"></script>

当然,总有比这更好的解决方案了。


答案 2

将当前时间附加到 URL 确实是一种常见的解决方案。但是,如果您愿意,也可以在 Web 服务器级别对此进行管理。可以将服务器配置为为 javascript 文件发送不同的 HTTP 标头。

例如,要强制文件缓存不超过 1 天,请发送:

Cache-Control: max-age=86400, must-revalidate

对于 beta 版,如果要强制用户始终获取最新版本,可以使用:

Cache-Control: no-cache, must-revalidate