Cuando hablamos de trabajar en la velocidad de carga de una web, sin duda lo primero que pensamos es el almacenamiento en caché. Algo imprescindible en el rendimiento de un sitio web. En este post te contaré los diferentes niveles diferentes de caché en webs hechas en WordPress. Aunque es aplicable a cualquier sitio web basado en PHP y MySQL.
OPcode Cache
Cuando escribimos código PHP, lo hacemos de una forma legible para nosotros. Pero, para que la maquina lo procese necesita ser convertido (compilado) a bytecode. Opcode cache es un denominado «Acelerador de PHP» porque guarda el código compilado en memoria RAM para evitar tener que volver a realizar el proceso. Lo que mejora el rendimiento en futuras cargas, ya que no será necesario compilar cada vez que se haga una petición.
¿Pero, que es OPcode cache? Es una extensión de PHP. A partir de PHP 5.5 viene incluida así que no tendríamos que instalarla. Aun así es recomendable que consultemos con nuestro proveedor de hosting para confirmarlo.
Caché de objetos
Un sitio web basado en WordPress genera muchas consultas MySQL a la base de datos. En una web con muchas visitas (ecommerce, blog, etc) puede generar una saturación de recursos y bajo rendimiento. La caché de objetos permite guardar en memoria consultas a la base de datos para evitar generar la misma consulta al servidor de manera innecesaria. Tenemos diversos plugins que manejan la caché de objetos. El más popular sin duda es W3 Total Cache. Pero, si estamos utilizando otro plugin que no utiliza la caché de base de datos podemos utilizar el parámetro QUERY_CACHE.
Caché de página
Por lo general, no todas las partes de una webs son dinámicas, osea que no sufren cambios constantes. Por ejemplo, la entrada de un blog, un producto de ecommerce, páginas como ‘Sobre Nosotros’, etc. En estos casos lo ideal es guardar en memoria caché una versión completa del HTML de esta pagina. De esta forma, un usuario que se meta por segunda vez en alguna de estas páginas, se le servirá esta versión en caché del HTML y no del servidor, lo que reduce el tiempo de carga de la web. A esto se le denomina Caché de página completa o Full-page cache. Plugins como el mencionado en el punto anterior (W3 Total Cache) o WP Rocket trabajan muy bien este tipo de caché.
Acelerador HTTP
Como hemos visto antes, las solicitudes de páginas son considerablemente más rápidas desde memoria caché que desde el propio servidor. Aunque este cuente con discos SSD. Un paso más en la caché de página completa es guardar también en dicha memoria las solicitudes HTTP. Herramientas como Varnish o FastCGI con Nginx pueden lograr esto.
CDN
CDN (Content Delivery Network) no es más que una red de servidores repartidos por el mundo que almacena y sirve recursos estáticos de tu web (css, js, imágenes, etc), aliviando la carga de tu propio servidor. Al contar con muchos servidores en diferentes localizaciones, a cada usuario le cargará los recursos de la CDN más cercana. Osea, que los recursos no procederán del mismo servidor para un usuario que se meta a tu web desde España o desde Estados Unidos. Si cuenta también con un Full-page cache, la CDN también puede guardar HTML estáticos en caché.
Muchos plugins de WordPress trabajan con CDN. Por ejemplo, Hummingbird Pro de WPMU DEV trabaja con una CDN propia para archivos estáticos e imágenes. Además de servirlas desde la CDN, ofrece una compresión 100% y formatos como WebP.
Caché de navegador
Hasta ahora hemos hablado de caché en memoria RAM o servidores externos. El último nivel, y de los más utilizados, es la caché en el lado cliente (navegador). Sin duda, guardar una versión en caché de archivos estáticos como CSS, JS, imágenes y fuentes en el propio navegador del cliente reducirá bastante las peticiones al servidor y se traducirá en mejor tiempo de respuesta. A través de las respuestas HTTP se le indica al navegador que recursos puede guardar en caché y durante cuanto tiempo. La mayoría de plugins de caché trabajan este tipo de caché aunque podemos conseguirlo sin plugins, solo con un poco de código en nuestro .htaccess en servidores Apache:
# Caché de archivos ExpiresActive on # Por defecto 1 mes de caché ExpiresDefault "access plus 1 month" # El HTML nunca debe de ser cacheado, así como los datos dinámicos ExpiresByType text/html "access plus 0 seconds" ExpiresByType text/xml "access plus 0 seconds" ExpiresByType application/xml "access plus 0 seconds" ExpiresByType application/json "access plus 0 seconds" ExpiresByType application/ld+json "access plus 0 seconds" ExpiresByType application/vnd.geo+json "access plus 0 seconds" # HTML components (HTCs) ExpiresByType text/x-component "access plus 1 month" # Favicon ExpiresByType image/x-icon "access plus 3 months" # Imágenes, vídeo, audio: 1 mes ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType video/ogg "access plus 1 month" ExpiresByType audio/ogg "access plus 1 month" ExpiresByType video/mp4 "access plus 1 month" ExpiresByType video/webm "access plus 1 month" # Fuentes web: 1 mes ExpiresByType application/font-woff "access plus 1 month" ExpiresByType application/font-woff2 "access plus 1 month" ExpiresByType application/x-font-woff "access plus 1 month" ExpiresByType application/x-font-ttf "access plus 1 month" ExpiresByType font/opentype "access plus 1 month" ExpiresByType image/svg+xml "access plus 1 month" ExpiresByType application/vnd.ms-fontobject "access plus 1 month" # CSS y JavaScript: 1 mes ExpiresByType text/css "access plus 1 month" ExpiresByType text/javascript "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" ExpiresByType application/x-javascript "access plus 1 month" ExpiresByType text/plain "access plus 1 month"
Conclusión
OPcode viene implementado por defecto en cualquier buen proveedor de hosting. Aún así, siempre es recomendable asegurarse de ello. El caché en navegador y CDN es una practica muy utilizada y recomendable para cualquier tipo de web. Si nuestro sitio web utiliza contenido estático, lo ideal sería utilizar caché de páginas completas y HTTP. Si la mayoría de nuestro contenido es dinámico, no te preocupes, la mayoría de plugins que utilizan este tipo de cache, también nos permiten elegir sobre que tipo de contenido queremos utilizarlo (Páginas, entradas, archivos, Custom Post Types…) En este caso, también podemos tirar por la caché de objetos, para reducir el número de consultas MySQL a la base de datos.
El plugin que trabaja con todos estos niveles de caché es W3 Total Caché. Aún que es un plugin muy completo, también es muy pesado. Así que si no vamos a utilizar la mayoría de estos tipos de caché, mejor utilizar otros. WP Rocket, Super cache o WP Fastest Cache también son muy recomendables.
Comentarios recientes