在PHP中,我试图从Rails剧本中窃取一个页面(参见“使用资产时间戳”here):
默认情况下,Rails附加资产' 所有资产路径的时间戳。这个 允许您设置缓存过期 资产的日期远远超过 未来,但仍然能够立即 只需更新即可使其无效 文件(因此更新 时间戳,然后更新URL 因为时间戳是其中的一部分, 这反过来破坏了缓存。)
这是网络的责任 您用来设置远期的服务器 缓存资产的到期日期 你需要利用这个 特征。这是Apache的一个例子:
# Asset Expiration
ExpiresActive On
<FilesMatch "\.(ico|gif|jpe?g|png|js|css)$">
ExpiresDefault "access plus 1 year"
</FilesMatch>
如果查看Rails页面的源代码,您将看到它们的含义:样式表的路径可能是"/stylesheets/scaffold.css?1268228124"
,其中末尾的数字是文件最后的时间戳更新。
所以它应该像这样工作:
scaffold.css?1268228124
的样式表可以缓存一年 - 它不会改变。'scaffold.css?1268228124
,因为数字会更改。我认为这很棒。所以我写了一个函数,用函数表和javascript标签添加时间戳附加到文件名,然后我用上面的语句配置了Apache。
现在:如何判断缓存和缓存清除是否有效?
我正在使用Firebug的两个插件检查我的页面:Yslow和Google Page Speed。两者似乎都说我的文件正在缓存:Yslow中的“添加过期标题”和“页面速度”中的“利用浏览器缓存”都会被检查。
但是当我查看Page Speed Activity时,我看到很多请求并等待,并且没有'缓存命中'。
如果我更改样式表并重新加载,我会立即看到更改。但我不知道是不是因为浏览器从未缓存过,或者因为缓存被破坏了。
我怎么知道?
如果有人感兴趣,我刚写了a blog post explaining the details。
答案 0 :(得分:3)
在firebug
中,您会看到304 Not Modified
的缓存页面。
检查您是否在Apache
中实施了these measures - 我发现您需要混合使用所有浏览器的设置。