浏览器何时自动清除外部 JavaScript 文件的缓存?
Posted
技术标签:
【中文标题】浏览器何时自动清除外部 JavaScript 文件的缓存?【英文标题】:When does browser automatically clear cache of external JavaScript file? 【发布时间】:2010-09-17 10:23:21 【问题描述】:我有一个可以随时编辑的 javascript 资源。一旦它被编辑,我希望它能够相对快速地传播到用户的浏览器(大概 15 分钟左右),但是,这个资源被编辑的频率很少(可能一个月 2 次)。
我希望将资源缓存在浏览器中,因为它会被频繁检索,但我也希望缓存在浏览器上以半定期的时间间隔重置。
我知道我可以在请求资源时传递 no-cache 标头,但我想知道如果我没有传递 no-cache,缓存何时会在浏览器上自动重置。
我想这对于每个浏览器来说都是独立的,但我不确定。
我试着用谷歌搜索这个,但我发现的大部分点击都是关于清除浏览器的缓存...这不是我要找的。p>
【问题讨论】:
【参考方案1】:在您的 javascript 代码中添加一个这样的版本,当您进行更改时会更新
<script src="/code.js?ver=123" type="text/javascript"></script>
他们总是会得到新版本。
【讨论】:
当然,这假设 html 也没有被缓存... ;)【参考方案2】:HTTP 为浏览器以不同方式忽略的缓存提供了几个控件。如果您设置了合理的过期日期,大多数浏览器都会检查它们是否具有当前版本的适当频率。
您要在此处包含的搜索词(以避免浏览器用户指令)是 HTTP。
更多见:
Caching Tutorial for Web Authors and Webmasters How Web Caches Work(有点旧,但仍然有用)。 HTTP/1.1: Caching in HTTP【讨论】:
【参考方案3】:您可以将版本字符串作为 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>
【讨论】:
是的,这正是我们所做的。外部 CSS 文件也是如此。 是缓存的svn_version=678的javascript,还是每次都重新加载(因为附加了一个get参数)? 这种方法也被用于 Ruby on Rails。 “你可以根据文件系统时间戳或你的颠覆提交号计算它”如何? SVN 在提交时会这样做吗? 虽然这不是万无一失的,但一些代理服务器将查询参数作为缓存的一部分。最好的解决方案是将时间戳或版本添加到文件名中。在我的网站上,我在构建时生成文件的 7 位校验和,因此如果文件中有任何更改,则会生成新的校验和,文件被重命名,因此浏览器知道下载更新的文件。以上是关于浏览器何时自动清除外部 JavaScript 文件的缓存?的主要内容,如果未能解决你的问题,请参考以下文章
Javascript实现页面加载完成后自动刷新一遍清除缓存文件