2010-09-04 4 views
21

Ich führe Google PageSpeed ​​auf meiner Website und es ist mir sagen, dass ich
"Geben Sie einen Cache-Validator.".htaccess: Wie "einen Cache-Validator angeben"?

Den folgenden Ressourcen fehlt ein Cache-Validierer. Ressourcen, die keinen Cache-Validierer angeben, können nicht effizient aktualisiert werden. Geben Sie einen Last-Modified oder ETag Header Cache-Validierung für die folgenden Ressourcen zu aktivieren:

... dann listet es Bilder, CSS, JS, usw.

Nach http://code.google.com/speed/page-speed/docs/caching.html#LeverageBrowserCaching:

Set das Datum der letzten Änderung bis zur letzten Änderung der Ressource. Wenn das Datum der letzten Änderung in der Vergangenheit ausreichend weit ist, wird der Browser es wahrscheinlich nicht erneut abrufen.

Ich habe folgendes in meinem .htaccess:

<IfModule mod_headers.c> 
    <FilesMatch "\.(bmp|css|flv|gif|ico|jpg|jpeg|js|pdf|png|svg|swf|tif|tiff)$"> 
     Header set Last-Modified "Tue, 31 Aug 2010 00:00:00 GMT" 
    </FilesMatch> 
</IfModule> 

Was mache ich falsch?

Antwort

15

Ich denke, das Problem, das Sie haben, ist mit Expire: und nicht mit Last-Modified:. Apache würde standardmäßig die Datei Last-Modified: Header basierend auf dem Dateidatum senden. Ich schlage vor, den oberen Code zu entfernen und durch das Ersetzen folgendes:

<IfModule mod_expires.c> 
    ExpiresActive On 
    ExpiresDefault "access plus 1 year" 
</IfModule> 

mit dem Versuchen, wenn es nicht Versuch funktioniert hat diese Zugabe auch:

<IfModule mod_headers.c> 
    <FilesMatch "\.(bmp|css|flv|gif|ico|jpg|jpeg|js|pdf|png|svg|swf|tif|tiff)$"> 
     Header set Last-Modified "Mon, 31 Aug 2009 00:00:00 GMT" 
    </FilesMatch> 
</IfModule> 
+0

Ich habe bereits Dinge wie: ExpiresByType Text/CSS "Zugriff plus 1 Jahr" in mod_expires. Irgendwelche anderen Vorschläge? – StackOverflowNewbie

+0

Probieren Sie die neue 'Header-Set Last-Modified" Mo, 31. August 2009 00:00:00 GMT "' anstatt der einen, den Sie haben, dieser ist ein Jahr älter! – aularon

+0

Versuchte es, machte keinen Unterschied. Irgendwelche anderen Ideen? – StackOverflowNewbie

5

Um einen Cache „Set Validator“müssen Sie die folgende in Ihrem Header senden:

ExpiresoderCache-Control: max-age

UND

Last-ModifiedoderETag

So zum Beispiel in PHP können Sie die folgenden CSS und JS-Dateien hinzufügen:

<filesMatch "\.(js|css)$"> 
    Header set Expires "Thu, 21 May 2013 20:00:00 GMT" 
    Header set Last-Modified "Thu, 21 May 2012 20:00:00 GMT" 
</filesMatch> 

Dieser Pagespeed Rechner zufrieden stellen wird Google.

1

Ich habe alle oben genannten Codes getestet, aber sehe keine Änderung in gtmetrix Rang. Mit diesem verbesserten Cache-Control Rang für meine Wordpress-Seite (ein Cache-Validator angeben):

## EXPIRES CACHING ## 
<IfModule mod_expires.c> 
ExpiresActive On 
ExpiresByType image/jpg "access 1 year" 
ExpiresByType image/jpeg "access 1 year" 
ExpiresByType image/gif "access 1 year" 
ExpiresByType image/png "access 1 year" 
ExpiresByType text/css "access 1 month" 
ExpiresByType application/pdf "access 1 month" 
ExpiresByType text/x-javascript "access 1 month" 
ExpiresByType application/x-shockwave-flash "access 1 month" 
ExpiresByType image/x-icon "access 1 year" 
ExpiresDefault "access plus 1 year" 
</IfModule> 
## EXPIRES CACHING ## 

<ifModule mod_headers.c> 
    <filesMatch "\\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$"> 
    Header set Cache-Control "max-age=2592000, public" 
    </filesMatch> 

    <filesMatch "\\.(css)$"> 
    Header set Cache-Control "max-age=2592000, public" 
    </filesMatch> 

    <filesMatch "\\.(js)$"> 
    Header set Cache-Control "max-age=216000, private" 
    </filesMatch> 

    <filesMatch "\\.(xml|txt)$"> 
    Header set Cache-Control "max-age=216000, public, must-revalidate" 
    </filesMatch> 

    <filesMatch "\\.(html|htm|php)$"> 
    Header set Cache-Control "max-age=1, private, must-revalidate" 
    </filesMatch> 
</ifModule> 

Ich empfehle Ihnen, max-age-Werte für Ihre Website anpassen und es ist Dateien selbst.

Verwandte Themen