14

我正在开发一个中等大小的 Web 应用程序,并试图提出最佳解决方案,以使所有浏览器都使用缓存,并且仅在加载的资产有更新时才使其无效。

根据我在这里和其他地方所做的研究,每个人似乎都同意将 ?v={version#} 附加到诸如 css 或 js 文件之类的资产是一种在资产时自动使缓存无效的好方法已更新。(根据强制浏览器清除缓存防止浏览器缓存 JavaScript 文件的更好方法

但在我看来,这个解决方案应该推广到驻留在 Web 服务器上的所有资产。

所以我的问题是,让构建脚本查看整个网站的每个 src="" 属性是否是一个好习惯——无论是 img、css 还是 js,并以编程方式附加 ?={timestamp},其中时间戳是上次修改文件的时间。这样,每当您从开发推送到登台再到生产时,只有那些已修改的文件才会具有更改的时间戳,并且浏览器将知道使这些文件的缓存无效。

这种方法有什么缺陷吗?

注意:再多考虑一下,时间戳在稍后恢复的更改的情况下肯定是不可取的。因此,附加 ?={md5(filecontents)} 是一种更健壮的方法。然而,关于是否在所有资产和所有构建中实施这一点的问题仍然存在。

4

1 回答 1

8

在如何强制浏览器重新加载缓存的 CSS/JS 文件中找到我认为可以接受的解决方案?不知道我在最初的调查中是如何错过的。

对于遇到此问题的任何人,请注意我指的是链接页面上的第一个答案,该答案引用了 Google 的 apache 的mod_pagespeed插件。这适用于 Web 服务器级别,因此“[它适用于] PHP、rails、python、静态 HTML——任何东西。”

这正是我正在寻找的解决方案。所有 Web 开发人员都应该使用此工具或类似工具,以保持缓存逻辑与代码本身正交。

于 2013-07-27T01:26:04.093 回答