0

テストの目的で、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がキャッシュされたハッシュバージョンに正しく置き換えられます。

ただし、これはmax-ageまでしか持続しません。したがって、10秒に設定すると、を指し続けますが、10秒後に再びhttp://localhost/mod_pagespeed_example/images/xPuzzle.jpg.pagespeed.ic.hgbHsZe0IN.jpg戻り、その時点でキャッシュされたバージョンに戻ります。images/Puzzle.jpg

これは予想される動作ですか?pagespeedはmax-ageの後にハッシュをチェックし、それが同じであれば、元の値に戻すことを気にせず、代わりにキャッシュされたファイルを提供し続けると思います。

これはやや心配です。max-ageをもっと便利なもの(たとえば60分)に設定すると、これらのアセットファイルを引き続き更新し、更新がタイムリーに表示されるようになります。ただし、ユーザーが1日に1回サイトにアクセスした場合、それは最大年齢を超えており、キャッシュされたバージョンではなく、常に元のファイルが提供されます。

4

1 に答える 1

1

これは予想される動作です。おっしゃるように、その理由は、リソースがキャッシュで期限切れになっているため、リソースがまだ同じであることを確認するために再チェックする必要があるためです。すべてのサブリソースをチェックしている間、ユーザーリクエストをブロックしたくありません。

これに対する1つの解決策は、ModPagespeedLoadFromFileを使用することです。これにより、ディスク上のファイルの最終変更時刻がチェックされるため、リソースがキャッシュで期限切れになった場合でもチェックできます。

于 2013-03-27T17:48:02.097 に答える