2010-09-04 15 views
21

Sto eseguendo Google PageSpeed ​​sul mio sito e mi viene comunicato che ho bisogno di
"Specificare un validatore di cache.".htaccess: Come "Specificare un validatore di cache"?

Nelle seguenti risorse manca un validatore di cache. Le risorse che non specificano un validatore di cache non possono essere aggiornate in modo efficiente. Specificare un Last-Modified o ETag per abilitare la convalida della cache per le seguenti risorse:

... allora elenca immagini, CSS, JS, ecc

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

Set la data Ultima modifica all'ultima volta in cui la risorsa è stata modificata. Se la data Ultima modifica è sufficientemente sufficiente in passato, è probabile che il browser non la rispecchierà.

Ho il seguente nel mio .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> 

Che cosa sto facendo di sbagliato?

risposta

15

Penso che il problema riscontrato sia con Expire: e non con Last-Modified:. Apache avrebbe di default inviato l'intestazione del file Last-Modified: in base alla data del file. Suggerisco di rimuovere il codice in alto e la sua sostituzione con il seguente:

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

Prova con quello, se non ha funzionato prova ad aggiungere anche questo:

<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

Ho già cose come: ExpiresByType text/css "access plus 1 year" in mod_expires. Qualche altro suggerimento? – StackOverflowNewbie

+0

prova il nuovo 'Header set Last-Modified" Lun, 31 Aug 2009 00:00:00 GMT "' invece di quello che hai, questo è un anno più vecchio! – aularon

+0

Provato, non ha fatto differenza. Altre idee? – StackOverflowNewbie

5

Al fine di "Set A Cache Validator", è necessario inviare il seguente nelle intestazioni:

ExpiresoCache-Control: max-age

E

Last-ModifiedoETag

Così, per esempio, in PHP si potrebbe aggiungere quanto segue per file JS CSS e:

<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> 

Questo soddisferà calcolatrice Pagespeed di Google.

1

Ho testato tutti i codici precedenti, ma non vedo cambiamenti nel grado gtmetrix. Usando questo miglioramento Cache-Control (Specifica una convalida della cache) rango per il mio sito WordPress:

## 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> 

vi consiglio di personalizzare i valori max-età per il vostro sito ed il suoi file da soli.

Problemi correlati