如何缓存css& javascript文件聪明吗?

时间:2012-09-27 09:43:15

标签: dojo browser-cache

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

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

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

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

我的问题是:

  1. 您知道更好的方法来管理缓存和更新的文件 mentionned
  2. 在dojoConfig中,是否有一些智能方法可以应用此操作 一些包文件?
  3. 感谢您的任何信息!

1 个答案:

答案 0 :(得分:1)

我已经完成了你正在做的两种不同的方式。我认为没有正确的答案。最好的答案是适合您的环境。

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

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


编辑:

Dojo配置有一个'cacheBust'属性,您可以使用它。

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

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