Cargar páginas en caché

Cuando utilizamos la caché, nuestras páginas se muestran más rápidamente. Pero si la página no está en caché, primero debe guardarse en caché y después mostrarse, por lo que la primera vez que la visitamos sin caché, suele ser más lenta.

Como bien sabemos la caché puede ser de objetos, OPcache de PHP, de la base de datos, caché completa de página en disco o en memoria, caché del navegador, desde la CDN y solo por hablar de algunas opciones; porque en realidad hay más y es un tema bastante más complicado.

Pero si nos quedamos con la idea de que la primera carga de una web después de borrar la caché será más lenta, lo que nos interesa es que esa primera visita no sea de un cliente o un robot que vaya a indexar nuestra web y la califique con un tiempo bajo.

Como ya he mencionado en varias ocasiones, suelo utilizar Redis para la caché de objetos y también la caché de página con Nginx, con un excelente rendimiento. Pero también suelo utilizar Cloudflare como CDN y Firewall antes de llegar al servidor.

Por ese motivo es muy fácil borrar la caché directamente desde WordPress, pero no dispongo de una opción para pre cargar la caché, como tiene por ejemplo WP Rocket. Pero aunque se podría hacer fácilmente con un plugin a medida, si lo puedo automatizar sin que tenga que intervenir el servidor, siempre me gusta más.

Y aquí tenemos Optimus Cache Prime, que aunque dispone de varias versiones como la de Windows, yo prefiero instalarlo en WSL2.

Para su instalación creo un directorio ocp en mi raíz y descargo y descomprimo el ejecutable:

$ mkdir ocp
$ cd ocp
$ wget https://cdn.pmylund.com/files/tools/ocp2/linux/ocp-2.7-amd64.tar.gz
$ tar -xf ocp-2.7-amd64.tar.gz

Y ya puedo ejecutar ocp (con su ruta completa, ya que no lo instalé en /usr/local/bin), para lo que necesito una url con un mapa XML en el que se indiquen las páginas a visitar y que por lo tanto irá cargando en caché.

Aquí podemos indicarle el mapa de nuestro plugin de SEO (el mapa de YOAST, Rank Math, etc.), pero estaríamos cargando todas las páginas a indexar y en ocasiones no queremos cargar esta gran cantidad de páginas en caché, sino las más importantes.

En el caso de esta web, tengo un mapa XML con las 10 páginas que deseo cargar en caché cada vez que se purga la caché completa, la url es https://tabernawp.com/sitemap-cache.xml

Para decirle a ocp que cargue esas páginas ejecutamos el siguiente comando:

$ /home/carlos/ocp/ocp -c 3 -v=true https://tabernawp.com/sitemap-cache.xml

Dónde el parámetro -c indica la concurrencia (carga 3 páginas cada vez) y -v=true es para que nos muestre el resultado por pantalla (verbose):

Optimus Cache Prime

Disponemos de más opciones, como comprobar en disco si existe la caché que generan algunos plugins (si lo ejecutamos en el propio servidor en lugar de en remoto); o por ejemplo enviar una cabecera de Agente de Usuario personalizada con el parámetro –ua (para distinguir nuestras peticiones o evitar un firewall).

Truco Extra

Si tenemos varias webs de clientes (o propias) en las que debemos realizar esta operación con relativa frecuencia, será muy útil crear alias, por ejemplo:

alias cache-taberna='/home/carlos/ocp/ocp -c 3 v=true https://tabernawp.com/sitemap-cache.xml'

Como creo todos los alias con cache- al escribir en el terminal cache- y pulsar el tabulador, me mostrará todas las opciones disponibles, que si además usamos Oh My Zsh, será tan fácil como desplazarnos por las diferentes opciones para seleccionar la que queramos.

Alias Optimus Cache Prime

Truco Extra 2

En mi caso tengo un par de instalaciones Linux en WSL2 (Ubuntu y Kali Linux) además de las del portátil, por lo que tener actualizados todos los alias es un poco problemático. Para eso lo que hago es crear un archivo .ssh_aliases en un almacenamiento en la nube (en mi caso para esto utilizo Dropbox) y comprobar si existe e incluirlo en caso afirmativo:

# include .ssh_aliases if it exists
if [ -f /mnt/d/Dropbox/Personal/ssh/.ssh_aliases ]; then
    . /mnt/d/Dropbox/Personal/ssh/.ssh_aliases
fi

Y así tengo todos los alias en un mismo archivo (conexiones SSH, OCP y otros), por lo que con ejecutar cache-taberna en cualquiera de mis terminales me dará el mismo resultado, ya sea en las instalaciones WSL2 o desde el portátil.

Console alias

Añadido 11/11/2021 17:50: Gracias al tweet de Fernando Puente, toda una autoridad en el tema de caché; he buscado un poco más sobre el concepto de Cache Warming y llegado a este artículo What is Cache Warming?. En el mismo podemos ver algunos posibles problemas de «calentar la caché», en este caso y para CloudFlare, solo estaríamos creando la copia en caché en el Centro de datos de CF más cercano, aunque si que generaría la copia de Redis de mi servidor.

Deja un comentario