强制浏览器只有在更改后才重新加载css / js

时间:2012-08-16 12:34:33

标签: javascript css caching continuous-deployment auto-versioning

关于我的问题有很多问题和答案[我希望浏览器永远缓存js / css。在新版本中,如果某些js / css文件已更新,浏览器应重新加载并缓存它们。]

这个解决方案对我来说似乎最合适: What is an elegant way to force browsers to reload cached CSS/JS files?

但是,我无法弄明白一件事。 该解决方案使用last_modified_time。但是,我不允许使用它。我需要使用其他一些机制。

有哪些选择?是否有可能在构建期间预先计算版本并通过构建脚本在jsps中更新(替换)它们(在部署之前,以便版本号不在运行时计算)?用于此目的的任何现有工具?我使用Java / Jsp。

3 个答案:

答案 0 :(得分:2)

我们总是使用

file.css?[deploytimestamp]

这样,CSS文件就会缓存在客户端的每个部署中。我们的缩小javascript也是如此。这是你的选择吗?

答案 1 :(得分:2)

这可能不是最好的方式,但这就是我现在正在做的事情:

  1. 我的所有js / css都有一个[source control = svn]版本号
  2. 我的jsp中的引用类似于/ foo / path1 / path2 / xyz000000 / foo。
  3. 构建步骤1 - 生成css | js文件及其修订号
  4. 的映射
  5. 构建步骤2 - 使用svn版本的散列替换jsps中的xyz000000引用
  6. url重写器中用于指示所有/ foo / path1 / path2 / xyz< 767678> / foo的规则。到/foo/path1/path2/foo.[js|css]
  7. 无限缓存css | js文件
  8. 只要有提交,修订号就会改变,.jsp
  9. 中的引用也会改变

答案 2 :(得分:1)

部署后生成每个css文件的md5-hash。使用此哈希而不是css网址中的时间戳。

file.css?[hash of file.css contents]

在部署之后计算哈希值并将其存储以获得一些性能可能是明智之举。您可以将它们存储在数据库中,甚至可以存储在网站代码中包含的单独文件中的PHP数组中。