2013-03-26 40 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。這將檢查文件在磁盤上的最後修改時間,因此即使資源在緩存中過期也可以檢查。