【问题标题】:When does browser automatically clear cache of external JavaScript file?浏览器何时自动清除外部 JavaScript 文件的缓存?
【发布时间】:2010-09-17 10:23:21
【问题描述】:

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

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

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

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

我试着用谷歌搜索这个,但我发现的大部分点击都是关于清除浏览器的缓存...这不是我要找的。​​p>

【问题讨论】:

    标签: caching browser


    【解决方案1】:

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

    <script src="/code.js?ver=123" type="text/javascript"></script>
    

    他们总是会得到新版本。

    【讨论】:

    • 当然,这假设 HTML 也没有被缓存... ;)
    【解决方案2】:

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

    您要在此处包含的搜索词(以避免浏览器用户指令)是 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 位校验和,因此如果文件中有任何更改,则会生成新的校验和,文件被重命名,因此浏览器知道下载更新的文件。
      猜你喜欢
      • 1970-01-01
      • 2021-01-25
      • 2021-02-05
      • 2017-07-20
      • 2015-02-18
      • 2012-07-10
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多