在PHP中,我试图从Rails剧本中窃取一个页面(请参阅此处的 "使用资产时间戳" ):
默认情况下,Rails会将资产的时间戳附加到所有资产路径.这允许您为将来的资产设置缓存过期日期,但仍然可以通过简单地更新文件立即使其无效(并因此更新时间戳,然后更新URL,因为时间戳是其中的一部分,反过来破坏缓存).
您使用的Web服务器负责设置您需要利用此功能的缓存资产的远期到期日期.这是Apache的一个例子:
# Asset Expiration ExpiresActive OnExpiresDefault "access plus 1 year"
如果查看Rails页面的源代码,您将看到它们的含义:样式表的路径可能是"/stylesheets/scaffold.css?1268228124"
,最后的数字是文件上次更新时的时间戳.
所以它应该像这样工作:
浏览器说"给我这个页面"
服务器说'在这里,顺便说一下,这个被调用的样式表scaffold.css?1268228124
可以缓存一年 - 它不会改变.'
在重新加载时,浏览器说'我不是要求那个css文件,因为我的本地副本仍然很好.'
一个月后,您编辑并保存文件,这会更改时间戳,这意味着scaffold.css?1268228124
由于数字更改,不再调用该文件.
当浏览器看到它时,它说'我从未见过那个文件!请给我一份副本.缓存被"破坏".
我认为这很棒.所以我写了一个函数,用函数表和javascript标签添加时间戳附加到文件名,然后我用上面的语句配置了Apache.
现在:我如何判断缓存和缓存清除是否有效?
我正在用Firebug的两个插件检查我的页面:Yslow和Google Page Speed.两者似乎都说我的文件正在缓存:Yslow中的"添加过期标题"和"页面速度"中的"利用浏览器缓存"都被选中.
但是当我查看Page Speed Activity时,我看到很多请求并等待,没有'缓存命中'.
如果我更改样式表并重新加载,我会立即看到更改.但我不知道是不是因为浏览器从未缓存过,或者因为缓存被破坏了.
我该怎么说?
如果有人有兴趣,我只是写了一篇博客文章解释细节.