管理所有资产缓存(图像、CSS、JS等)的最佳实践

14
我正在处理一个中等大小的网络应用程序,并尝试想出最佳解决方案,以使所有浏览器都使用缓存,并仅在加载的资产有更新时才使其失效。
根据我在这里和其他地方所做的研究,似乎每个人都同意将?v={version#}附加到诸如css或js文件之类的资产是一种自动使资产失效的好方法。 (参见Force browser to clear cacheBetter way to prevent browser caching of JavaScript files)
但我认为这个解决方案应该泛化到网站上驻留的所有资产。
所以我的问题是,有没有好的实践方法可以让构建脚本查找整个网站上的每个src=""属性 - 无论是img、css还是js,并以编程方式追加?={timestamp},其中时间戳是文件最后修改的时间。这样,每当您从开发推送到暂存再到生产时,只有那些已修改的文件才会有更改的时间戳,并且浏览器将知道使这些文件的缓存失效。
这种方法有什么不足之处吗?
注意:再考虑一下,时间戳对于稍后撤销的更改肯定是不理想的。因此,追加?={md5(filecontents)}是一种更为强大的方法。但是,是否在所有资产和所有构建中实施这个方法仍然是一个问题。

有趣的问题。期待答案:) - null
@ajkochanowicz 这不是一个通用的解决方案,即使RoR为您处理了这个问题。我提出的问题适用于所有Web服务器和所有开发环境。一个好的问题是,RoR如何实现自己的解决方案,并且是否推广到所有开发环境?由于这个问题是多么普遍,应该有一个开源解决方案来解决它。 - Peter Thorpe
1个回答

8
我在如何强制浏览器重新加载缓存的CSS / JS文件?找到了我认为是可接受的解决方案。不知道我在原始调查中是如何错过它的。
对于任何来到这个问题的人,请注意我指的是链接页面上第一个回答,它引用了谷歌的mod_pagespeed Apache插件。这在Web服务器级别工作,因此“[它适用于]使用PHP,rails,python,静态HTML等任何内容”。
这正是我正在寻找的解决方案。所有Web开发人员都应该使用此工具或类似工具,以使缓存逻辑与代码本身保持正交。

1
只是为了澄清像我这样找到这里的任何人,@PeterThorpe提到的答案链接在这里 - doz87

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接