我如何测试缓存和缓存清除?

时间:2010-03-19 20:38:25

标签: php apache caching

在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",其中末尾的数字是文件最后的时间戳更新。

所以它应该像这样工作:

  1. 浏览器上写着“给我这个页面”
  2. 服务器说'在这里,顺便说一句,这个名为scaffold.css?1268228124的样式表可以缓存一年 - 它不会改变。'
  3. 在重新加载时,浏览器说'我不是要求那个css文件,因为我的本地副本仍然很好。'
  4. 一个月后,您编辑并保存文件,这会更改时间戳,这意味着该文件不再被称为scaffold.css?1268228124,因为数字会更改。
  5. 当浏览器看到它时,它说'我从未见过那个文件!请给我一份副本。缓存已被“破坏”。
  6. 我认为这很棒。所以我写了一个函数,用函数表和javascript标签添加时间戳附加到文件名,然后我用上面的语句配置了Apache。

    现在:如何判断缓存和缓存清除是否有效?

    我正在使用Firebug的两个插件检查我的页面:Yslow和Google Page Speed。两者似乎都说我的文件正在缓存:Yslow中的“添加过期标题”和“页面速度”中的“利用浏览器缓存”都会被检查。

    但是当我查看Page Speed Activity时,我看到很多请求并等待,并且没有'缓存命中'。

    如果我更改样式表并重新加载,我会立即看到更改。但我不知道是不是因为浏览器从未缓存过,或者因为缓存被破坏了。

    我怎么知道?

    更新:它正在运行!

    如果有人感兴趣,我刚写了a blog post explaining the details

1 个答案:

答案 0 :(得分:3)

firebug中,您会看到304 Not Modified的缓存页面。

检查您是否在Apache中实施了these measures - 我发现您需要混合使用所有浏览器的设置。