2013-03-26 47 views
0

出于测试目的,我有这个在我的Apache配置:的mod_pagespeed不发送预期的输出与扩展缓存

<Directory "/home/http"> 
    ... 
    <FilesMatch "\.(html|htm)$"> 
     Header unset Etag 
     Header set Cache-control "max-age=0, no-cache" 
    </FilesMatch> 

    <FilesMatch "\.(jpg|jpeg|gif|png|js|css)$"> 
     Header unset Etag 
     Header set Cache-control "public, max-age=10" 
    </FilesMatch> 
</Directory> 

这基本上说来设置静态资产有持续10秒的缓存。这又是为了测试和演示的目的。

我直接导航到该文件

$ wget -O - --save-headers localhost/mod_pagespeed_example/images/Puzzle.jpg 
Cache-control: public, max-age=10 

工作正常测试它。但后来我尝试加载页面mod_pagespeed和extend_cache启用

$wget -O - --save-headers localhost/mod_pagespeed_example/extend_cache.html?ModPagespeed=on&ModPagespeedFilters=extend_cache 
<img src="images/Puzzle.jpg"/> 

$wget -O - --save-headers localhost/mod_pagespeed_example/extend_cache.html?ModPagespeed=on&ModPagespeedFilters=extend_cache 
<img src="http://localhost/mod_pagespeed_example/images/xPuzzle.jpg.pagespeed.ic.hgbHsZe0IN.jpg"/> 

这是所有罚款和丹迪。初始请求不起作用,因为它需要将信息加载到缓存中,但是从那里它会正确地用缓存的哈希版本替换img标签的src。

但是,这只会持续UNTIL最大年龄。所以,如果我将它设置为10秒,它将继续指向http://localhost/mod_pagespeed_example/images/xPuzzle.jpg.pagespeed.ic.hgbHsZe0IN.jpg,但是之后它将在10秒后再次恢复为images/Puzzle.jpg,届时它将返回到缓存版本。

这是预期的行为?我认为pagespeed会在max-age之后检查散列,如果它相同,则不会将其更改回原始值,而是继续提供缓存文件。

这有点关系。如果我将max-age设置为更有用的内容(比如60分钟),这将允许我继续更新这些资产文件并确保及时查看我的更新。但是,如果用户每天访问该网站一次,那么这比最大年龄更大,并且它们将始终用于原始文件而不是缓存版本。

回答

1

这是预期的行为。正如你所提到的,原因是资源已经在缓存中过期,所以我们需要重新检查它以确保它仍然是一样的。我们不希望在检查所有子资源时阻止用户请求。

请注意,对此的一种解决方案是使用ModPagespeedLoadFromFile。这将检查文件在磁盘上的最后修改时间,因此即使资源在缓存中过期也可以检查。