【问题标题】:Cache only the latest version of javascript file仅缓存最新版本的 javascript 文件
【发布时间】:2012-11-12 17:36:48
【问题描述】:

我在浏览器缓存 javascript 文件时遇到问题,即使我使用的是

FileETag MTime Size

在htaccess中查看修改时间和大小,看是否为最新版本。我目前包含这样的 javascript 文件:

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

我尝试将 SVN 修订信息添加到文件调用中,如下所示:

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

但我找不到一个防弹的方法来做到这一点,因为我无法通过文件名获得修订(任何建议),即使我添加了修订,HTML 正在被 Smarty 预编译和缓存。

所以我考虑过对模板不使用缓存块,但我还没有尝试过这种方法。由于文件只编译一次,会有什么不同吗?

所以基本上我只是在收集有关如何强制浏览器仅缓存文件的最新版本的想法。理想的解决方案是通过实际工作的 htaccess,而不是像 FileETag,因为这样,您总是必须按 CTRL+F5 才能获得最新版本。

【问题讨论】:

    标签: php javascript svn caching browser-cache


    【解决方案1】:

    在文件路径中添加缓存破坏器是最好的方法。您可以像这里一样通过? 方法进行操作,或者将其添加到文件的路径中,例如:/static/123/code.js

    之后,您在 10 年后添加 expires 标头,您就可以开始了。所以你的问题是如何在 url 中生成数字。也许您可以在部署时更改部署脚本以替换增加的数字,这样您就不需要关心版本号

    另一个想法是计算 js 文件的 md5 哈希并在路径中使用它。

    【讨论】:

    • 我没想过对文件内容进行哈希处理以获得唯一标识符,好主意!
    • 虽然 ?方法强制某些浏览器(至少是 Firefox)总是向服务器发送请求,而不管到期日期如何。通常会返回一个简短的 NOT MODIFIED 响应,但仍然如此。此外,使用最后修改日期作为缓存破坏器就足够了,并且比 MD5 更容易获得。
    • 对修改的日期 ID 也有很好的想法,但是我经常部署,并且部署会更改所有文件,因此添加颠覆号或内容散列仍然是我的方式,因为否则我每次部署时都会破坏每个用户的缓存。现在的问题是,如何通过 htaccess 或其他方式而不是通过代码将哈希添加到请求中?这有可能吗?
    • 我最终使用了修改时间哈希,因为它是最快的 ID 生成方法。使用 svn 修订版或文件内容进行散列大约需要 2 秒。由于我是在动态计算哈希值而不是在部署时计算,所以这将花费太长时间。 @WolfgangStengel,如果您将评论写为答案,我会接受。
    • 很高兴听到。不用担心答案,您可以接受 mkoryak 的答案,信息都在这里。
    猜你喜欢
    • 2022-10-15
    • 1970-01-01
    • 2020-06-11
    • 2016-05-20
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多