我正在开发一个中等大小的 Web 应用程序,并试图提出最佳解决方案,以使所有浏览器都使用缓存,并且仅在加载的资产有更新时才使其无效。
根据我在这里和其他地方所做的研究,每个人似乎都同意将 ?v={version#} 附加到诸如 css 或 js 文件之类的资产是一种在资产时自动使缓存无效的好方法已更新。(根据强制浏览器清除缓存和防止浏览器缓存 JavaScript 文件的更好方法)
但在我看来,这个解决方案应该推广到驻留在 Web 服务器上的所有资产。
所以我的问题是,让构建脚本查看整个网站的每个 src="" 属性是否是一个好习惯——无论是 img、css 还是 js,并以编程方式附加 ?={timestamp},其中时间戳是上次修改文件的时间。这样,每当您从开发推送到登台再到生产时,只有那些已修改的文件才会具有更改的时间戳,并且浏览器将知道使这些文件的缓存无效。
这种方法有什么缺陷吗?
注意:再多考虑一下,时间戳在稍后恢复的更改的情况下肯定是不可取的。因此,附加 ?={md5(filecontents)} 是一种更健壮的方法。然而,关于是否在所有资产和所有构建中实施这一点的问题仍然存在。