代码之家  ›  专栏  ›  技术社区  ›  blitzmann

mod_pagespeed未发送具有扩展缓存的预期输出

  •  0
  • blitzmann  · 技术社区  · 12 年前

    出于测试目的,我在Apache配置中有以下内容:

    <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替换为缓存的哈希版本。

    然而,这种情况只会持续到最长年龄。所以,如果我把它设置为10秒,它将继续指向 http://localhost/mod_pagespeed_example/images/xPuzzle.jpg.pagespeed.ic.hgbHsZe0IN.jpg ,但随后它将恢复为 images/Puzzle.jpg 10秒后再次,此时它将返回到缓存版本。

    这是预期的行为吗?我认为pagespeed会在最大年龄后检查散列,如果它是相同的,它就不会麻烦将其更改回原始值,而是继续为缓存的文件提供服务。

    这有点令人担忧。如果我将最长使用期限设置为更有用的值,比如60分钟,这将使我能够继续更新这些资产文件,并确保及时看到我的更新。然而,如果用户每天访问一次网站,那么这就超过了最长访问时间,他们将始终获得原始文件,而不是缓存版本。

    1 回复  |  直到 12 年前
        1
  •  1
  •   sligocki    12 年前

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

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