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

时间:2013-07-21 23:40:37

标签: css image caching web assets

我正在处理中等规模的Web应用程序,并试图找到最佳解决方案,使所有浏览器都使用缓存,并且只有在加载资产时才会使其无效。

根据我在这里和其他地方所做的研究,每个人似乎都同意将?v = {version#}附加到资产(如css或js文件)是自动失效的好方法资产更新时的缓存。 (根据Force browser to clear cacheBetter way to prevent browser caching of JavaScript files

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

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

有这种方法的任何缺陷吗?

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

1 个答案:

答案 0 :(得分:6)

How to force browser to reload cached CSS/JS files?找到我认为可接受的解决方案。不知道我在原始调查中是如何错过这一点的。

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

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