【问题标题】:How to cachebust css & javascript files smartly?如何巧妙地缓存 css 和 javascript 文件?
【发布时间】:2012-09-27 09:43:14
【问题描述】:

缓存好文件是一个老问题,但要确保在更新某些文件的某些修改时会提供最后一个版本。例如,众所周知,您可以将诸如时间戳之类的 get 变量附加到文件 uri 但您失去了所有缓存优势,文件将永远不会被缓存,呵呵! 目前,我发现一些网络建议的最佳方式是:

  • 在 htaccess 中添加过期信息,例如:ExpiresByType text/javascript “访问加 7 天”
  • 请求文件名+'-'+lastModifTimestamp(src)+fileExtension,例如:'dir/usualfilename-345678.js'。 lastModifTimestamp 由设置 服务器脚本,如 PHP filemtime($src)
  • 然后在 htaccess 中,添加一个重写规则,将 'dir/usualfilename-2345678.js' 重写为 'dir/usualfilename.js' :RewriteRule (.+)-[0-9]+(\.(js|css))$ $1$2 [L]

优点是您永远不必更改您使用的文件名,即使您的访问者浏览器的行为多么聪明或奇怪,缓存也是有效的,并且您确信它会在修改后获取更新的文件。

然后在我的 dojoConfig(dojo 1.7+)中,我有一个包,我喜欢所有模块路径都以最后一个 modif 时间戳为后缀(我的 dojo 配置是用 PHP 动态编写的)。我发现的唯一方法是使用 aliases 属性:我必须为所有包的文件设置别名,问题是它很重,那么如果我的包中有 100 个模块,即使我需要,我也需要 100 个声明的别名只有 3 个文件……它不是很“动态”。 cachebust 属性就在附近,但它适用于所有文件,并且如上文所述存在问题。

我的问题是:

  1. 您知道管理缓存和更新文件的更好方法吗? 提到
  2. 在 dojoConfig 中,是否有一些巧妙的方法可以将此操作应用于 一些包文件?

感谢您提供任何信息!

【问题讨论】:

    标签: dojo browser-cache


    【解决方案1】:

    我以两种不同的方式完成了你正在做的事情。我不认为有一个正确的答案。最佳答案是适合您的环境。

    1) 我目前的工作是开发一个版本控制良好的产品。所以我在请求 css 和 javascript 工件时将版本附加到 url。部署新版本时,最终用户将获得新文件。

    2) 我还维护一些没有严格版本控制方案的小型网站。对于这些,我使用 Web 服务器启动时间的时间戳。当我部署新代码时,它需要重新启动 Web 服务器(这些不是高可用性站点)。当我将更新部署到服务器并重新启动时,最终用户将获得新文件。


    编辑:

    Dojo 配置有一个可以使用的“cacheBust”属性。

    data-dojo-config="parseOnLoad: true, cacheBust: ???, packages: []"
    

    在哪里???是我之前提到的版本,服务器时间戳。

    【讨论】:

    • 感谢您的回复,1) 是的,我使用这种方式并且效果很好,当使用 dojo AMD 加载程序和模块路径、uris 和别名时,困难就来了... 2) 没有弄清楚这一点解决方案,但乍一看,它看起来有点重,我更喜欢第一个解决方案,因为我只需要上传修改过的文件
    猜你喜欢
    • 1970-01-01
    • 2019-10-21
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 2015-03-11
    • 1970-01-01
    相关资源
    最近更新 更多