浏览器何时自动清除外部JavaScript文件的缓存?

Eli*_*nor 50 browser caching

我有一个JavaScript资源,可以随时进行编辑.一旦它被编辑,我希望它能够相对快速地传播到用户的浏览器(比如大概15分钟左右),但是,这种资源编辑的频率很少而且很远(可能每月2次).

我宁愿在浏览器中缓存资源,因为它会被频繁检索,但我也希望缓存能够以半定期的间隔在浏览器上重置.

我知道我可以在请求资源时传递无缓存标头,但我想知道如果我没有通过no-cache,缓存会在浏览器上自动重置.

我想这对于每个浏览器都是独立的,但我不确定.

我尝试谷歌这个,但我发现的大多数点击是关于清除浏览器的缓存...这不是我正在寻找的.

aem*_*kei 53

您可以将版本字符串作为get参数传递给脚本标记的URL.该参数不会被静态JavaScript文件评估,但会强制浏览器获取新版本.

如果您不想在每次编辑源时分配版本字符串,则可以根据文件系统时间戳或subversion提交编号计算它:

<script src="/script.js?time_stamp=1224147832156" type="text/javascript"></script>
<script src="/script.js?svn_version=678" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

   

  • 这不是防弹的,一些代理服务器包括查询参数作为缓存的一部分.最佳解决方案是将时间戳或版本添加到文件名中.在我的网站上,我在构建时生成文件的7位校验和,因此如果文件中有任何更改,则会生成新的校验和,文件将被重命名,因此浏览器知道下载更新的文件. (2认同)

Cra*_*aig 14

在您的javascript代码上添加一个版本,在您进行更改时会更新

<script src="/code.js?ver=123" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

然后他们将始终获得新版本.

  • 当然,这假设HTML也没有被缓存......;) (13认同)

acr*_*man 13

HTTP为浏览器以不同方式忽略的缓存提供了多种控件.如果您设置了合理的到期日期,大多数浏览器都会检查他们当前版本是否具有合适的频率.

您希望在此处包含的搜索词(避免浏览器用户指示)是HTTP.

欲了解更多信息: