2010-04-20 21 views
24

Me hicieron pruebas en mi sitio web utilizando Page Speed ​​de Google y se recomienda que "el almacenamiento en caché del navegador reglas del juego" y proporcionan los siguientes recursos:establecer la caducidad del almacenamiento en caché de HTTP, recomendados por Google Page Speed ​​

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

Este recurso no explica cómo cambiar realmente la fecha de vencimiento de mis encabezados http. ¿Lo hago a través de .htaccess? Me gustaría establecer el almacenamiento en caché durante el mayor tiempo posible (sin violar la política de Google de un año como máximo).

Cualquier consejo sobre la configuración recomendada (para una comunidad de redes sociales impulsada por PHP) sería muy apreciado.

Respuesta

28

En .htaccess de la raíz:

<IfModule mod_expires.c> 
    ExpiresActive On 
    ExpiresDefault "access plus 1 seconds" 
    ExpiresByType image/x-icon "access plus 2592000 seconds" 
    ExpiresByType image/jpeg "access plus 2592000 seconds" 
    ExpiresByType image/png "access plus 2592000 seconds" 
    ExpiresByType image/gif "access plus 2592000 seconds" 
    ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds" 
    ExpiresByType text/css "access plus 604800 seconds" 
    ExpiresByType text/javascript "access plus 216000 seconds" 
    ExpiresByType application/x-javascript "access plus 216000 seconds" 
    ExpiresByType text/html "access plus 600 seconds" 
    ExpiresByType application/xhtml+xml "access plus 600 seconds" 
</IfModule> 

y siga por:

<IfModule mod_headers.c> 
<FilesMatch "\\.(ico|jpe?g|png|gif|swf)$"> 
Header set Cache-Control "max-age=2692000, public" 
</FilesMatch> 
<FilesMatch "\\.(css)$"> 
Header set Cache-Control "max-age=2692000, public" 
</FilesMatch> 
<FilesMatch "\\.(js)$"> 
Header set Cache-Control "max-age=216000, private" 
</FilesMatch> 
<FilesMatch "\\.(x?html?|php)$"> 
Header set Cache-Control "max-age=600, private, must-revalidate" 
</FilesMatch> 
Header unset ETag 
Header unset Last-Modified 
</IfModule> 

Este es exactamente el mismo código que uso en cada propiedad que administro y me ofrece (y PageSpeed) los resultados más satisfactorios. Uno puede discutir sobre reglas específicas, por eso dije que satisface me, pero ciertamente satisface la velocidad de página.

+2

Depende de qué quiere decir con "muchas condiciones". Las condiciones tienen que ser procesadas por el servidor web en cada solicitud HTTP, así que si piensas en más de 65,000 condiciones, entonces ciertamente no es una buena idea – methode

+8

Solo un consejo. Simplemente puede escribir "acceso más 1 año" o incluso directivas más complejas como "acceso más 1 mes, 15 días y 2 horas", que es mucho más fácil de leer y mantener que segundos. – GeneQ

+0

@GeneQ, +1 por ese consejo. Estoy acostumbrado a las marcas de tiempo de Unix, probablemente por eso utilizo segundos en las reglas. – methode

1

Se puede hacer con htaccess y php. Por lo general, no querrá forzar el almacenamiento en caché del html real ya que su contenido dinámico impulsado por la base de datos (se puede hacer con la función php header() si es necesario). Lo que desea almacenar en caché es css externo & javascript y archivos de imagen.

ver aquí para una solución .htaccess: http://www.askapache.com/htaccess/apache-speed-expires.html

Cuestiones relacionadas