4

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

这个解决方案对我来说似乎最合适: 强制浏览器重新加载缓存的 CSS/JS 文件的优雅方法是什么?

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

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

4

3 回答 3

2

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

  1. 我所有的 js/css 都有一个 [source control = svn] 修订号
  2. 我的 jsp 中的引用类似于 /foo/path1/path2/xyz000000/foo。
  3. 构建步骤 1 - 生成 css|js 文件及其修订号的映射
  4. 构建步骤 2 - 用 svn 修订的哈希替换 jsps 中的 xyz000000 引用
  5. url 重写器中的一条规则,用于指示所有 /foo/path1/path2/xyz<767678>/foo。到 /foo/path1/path2/foo.[js|css]
  6. 无限缓存 css|js 文件
  7. 每当有提交时,修订号都会更改,.jsp 中的引用也会更改
于 2012-08-29T07:32:56.753 回答
2

我们总是用

file.css?[deploytimestamp]

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

于 2012-08-16T12:42:13.867 回答
1

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

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

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

于 2012-08-16T13:51:02.293 回答