Mejora la velocidad de WordPress usando htaccess y Apache

Escrito por:
Fecha: 2013-06-14 22:56:35 00:00

Normalmente y por defecto WordPress no coloca un tiempo de expiración para los componentes del sitio. Es decir que dadas estas condiciones los caches intermedios entre el servidor y el cliente no pueden guardar copias de la página. El mismo caso para el cache del mismo navegador.

Esto hace que cuando navegamos en un sitio WordPress configurado por defecto, debemos cargar todos los elementos en cada página que vemos, cuando la mayoria de estos son los mismo y podrían estar en el cache de nuestro navegador.

Esto ademas que hacer que nuestra experiencia sea menos agradable, impone una carga innecesaria en nuestro servidor Web. Del mismo modo, muchos ISPs tienen caches intermedios, que no podrán guardar copias de nuestro sitio si no cambiamos la configuración por defecto del mismo.

Existe plugins como W3 Total Cache que agregan encabezados http (http headers) para solucionar este tema. Pero existe otra forma de hacerlo y es mediante htaccess, si es que usas Apache para servir el sitio.

Agregar encabezados usando mod_headers

Para logra el objetivo usando el módulo, mod_headers, debemos editar el archivo .htaccess que esta en la raiz de nuestra instalación WordPress y agregar las siguientes lineas, puede ser al comienzo del mismo.

# 1 Año para archivos que casi no cambian
<FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
Header set Cache-Control "max-age=29030400, public"
</FilesMatch>

# 1 mes para archivos de imagenes sobre todo
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>
 
# 1 semana para js y css
<FilesMatch "\.(txt|xml|js|css)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>
 
# No guardar contenido dinámico
<FilesMatch "\.(html|htm|php|cgi|pl)$">
Header set Cache-Control "max-age=0, private, no-store, no-cache, must-revalidate"
</FilesMatch>

Agregar encabezados usando el módulo mod_expires

Se puede lograr el mismo efecto si tienes instalado el módulo mod_expires en lugar del módulo mod_headers

ExpiresActive On
ExpiresDefault A0
  
# 1 año
<FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
ExpiresDefault A29030400
</FilesMatch>
 
# 1 mes
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
ExpiresDefault A2592000
</FilesMatch>
 
# 1 semana
<FilesMatch "\.(txt|xml|js|css)$">
ExpiresDefault A604800"
</FilesMatch>

Conclusión

Esto permitirá que el contenido estático, sea guardado en los servidores y caches intermedios, aliviando mucho la carga de nuestro servidor y tambien mejorando la experiencia del usuario final.

Si puedes instalar un "reverse proxy server" como Nginx or Varnish, estos guardaran copias de dichos archivos en la memoria y podran servirlos desde alli. Permitiendo a Apache dedicarse únicamente a trabajar con el contenido dinámico.