为了减少http请求,以及使js/css文件更容易推出,我已经安装了我的php应用程序来连接js和css文件。使用每个文件的2个字母代码(例如home.js代码=“AA”)将所有包含的文件按顺序合并为一个大文件。要生成名称,我按照它们加载的顺序组合所有代码,添加下划线,然后添加时间戳(例如“AABACE_12345678.js”)。然后在他们的服务目录中,我在htaccess中使用apache指令来解析php文件(唱sethandler),这样我就可以控制标题,并且返回301标题不变。在JS/CSS缓存
不幸的是,这是行不通的......我用萤火虫的Net面板和liveHTTPHeaders测试了它的废话。该页面每次都会加载该文件,即使它应该放在缓存中。这里的响应头文件的回报的一个示例:
Date Wed, 14 Jul 2010 17:00:28 GMT
Cache-Control private
Content-Encoding gzip
Etag "4b4a6d50f9acf924b9dce14e415f5c78"
Expires Wed, 28 Jul 2010 17:00:28 GMT
Vary Accept-Encoding
X-Powered-By PHP/5.2.6
Last-Modified Wed, 14 Jul 2010 16:59:35 GMT
Content-Length 39305
Content-Type text/css
注意:我省略了一些非高速缓存相关的头,喜欢的keepAlive,服务器等
我也应该注意到,我m有条件地压缩内容,因此是私有缓存控制头。我在这里错过了什么?内容应该由于过期标题而被缓存。我从文件名+时间戳的md5生成etag,以便从不改变文件。上次修改从未改变,过期时间永远不会改变....
[编辑]
所以进一步检查之后,我的css文件越来越缓存,但我的JavaScript是没有的。如果我有两个文件,IDENTICAL缓存标题(etag,expires,last-modified,cache-control),但唯一不同的是内容类型(一个“text/css”一个“text/javascript”),只有css正在缓存...令人沮丧的
我假设你的意思是最后一个filemtime()时间戳,而不是当前时间戳? – Wrikken 2010-07-14 17:14:50
@Wrikken - 正确。每次包含的js/css文件中的一个被更新时,它都会创建一个新名称,并将当前时间戳作为名称的一部分。但是用于生成Etag/Last-modified头的时间戳等于filetime()返回的内容。 – eCaroth 2010-07-14 18:32:34
好的,但只是要特别确定:所需文件的时间戳保持不变,并且您在指示要加载的文件时自动记住时间戳?如果是这样,你有我们测试的网址吗? YOu不会是'我正在开发这个网站,因此不要在个人浏览器中缓存任何'个人设置'的第一个被挫败的东西。 – Wrikken 2010-07-14 23:24:56