2012-09-27 21 views
1

这是一个老问题缓存以及文件,但可以肯定的是,当你更新了一些文件进行一些修改的最后一个版本将送达。例如,众所周知,你可以将一个get变量追加到文件uri中,但是你失去了所有的缓存优势,这些文件永远不会被缓存,呵呵! 就目前而言,我发现trought一些网页建议最好的办法是:如何巧妙地缓存css&javascript文件?

  • 附加到期的相关信息在htaccess的,例如:ExpiresByType文/ 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+)中,例如我喜欢所有模块路径后缀为最后一个修改时间戳(我的dojo配置是用dinamically写入PHP)的包。我发现的唯一方法是使用别名属性:我必须别名所有包的文件,问题是它很重,然后如果我的包中有100个模块,即使我需要,我也需要100个已声明的别名只有3个文件...它不是很“动态”。 cachebust属性很近,但它适用于所有文件,并且如上所述,它存在问题。

我的问题是:

  1. 你知道一个更好的办法来管理缓存和更新的文件作为 在dojoConfig mentionned
  2. ,有没有对 应用此操作的一些包文件的一些聪明的方法?

谢谢你的任何相关信息!

回答

1

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

1)我现在的演出公司研究开发出很好版本产品。所以当我请求CSS和JavaScript构件时,我会将版本追加到url。当部署新版本时,最终用户将获得新文件。

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


编辑:

道场配置具有您可以使用 'cacheBust' 属性。

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

其中???是我前面提到的版本,服务器时间戳。

+0

感谢您的回复,1)是的,我使用这种方式,完美的工作,使用dojo AMD加载程序和模块路径,uris和别名时遇到了困难... 2)没有弄清楚这个解决方案, ,它看起来有点沉重,我更喜欢第一个解决方案,因为我只需要上传修改后的文件 – dmidz