管理所有资产缓存的最佳实践(图像,css,js,所有内容)

Pet*_*rpe 13 css caching assets image web

我正在研究一个中等规模的Web应用程序,并尝试提出最佳解决方案,使所有浏览器都使用缓存,并且只在加载资产有更新时才使其无效.

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

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

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

有这种方法的任何缺陷?

注意:考虑到这一点,在稍后还原的更改的情况下,时间戳肯定是不合需要的.因此,附加?= {md5(filecontents)}是一种更强大的方法.然而,关于是否在所有资产和所有构建中实现此问题的问题仍然存在.

Pet*_*rpe 6

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

对于提出此问题的任何人,请注意我指的是链接页面上的第一个答案,它引用了Google的apache 的mod_pagespeed插件.这适用于Web服务器级别,因此"[它工作]与PHP,rails,python,静态HTML - 任何东西."

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