Caché

Cuando hablamos de Web Performance un elemento clave tras la optimización de todos los contenidos previos es la de la caché.

Un sistema de caché es aquel que permite almacenar elementos ya calculados y repetitivos, pudiendo ser servidos de una forma mucho más rápida que de la habitual.

La primera caché que podemos aplicar y que debería estar activa en cualquier proyecto es la caché del navegador. Esta caché está pensada para que una vez un usuario haya descargado un contenido no se tenga que volver a descargar, sino que se utilice la versión descargada previamente.

Por norma general cuando subimos una imagen o un vídeo a un servidor no suele modificarse, ese fichero es siempre el mismo. Por lo tanto, si un usuario lo descarga una vez no debería necesitar descárgalo más, aunque se vuelva a solicitar más veces. Por eso le indicaremos que lo almacene un tiempo prudencial (1 día, 1 semana, 1 mes, 1 año…).

Tenemos cabeceras generales que se pueden usar, como el Cache-Control en el que podemos informar cómo queremos que se gestione, o no, la caché. Existen parámetros de request y de response, según queramos que afecte a los elementos.

Por otro lado, para los distintos elementos podemos enviar la cabecera Last-Modified y trabajar con ella con If-Modified-Since. Con esto le diremos al sistema cuál es la fecha del último cambio del contenido, y cuándo queremos que deje de estar en caché.

Otra opción puede ser la del uso de ETag y su correspondiente If-None-Match para la validación de cambios. Con este sistema le damos un identificador único al contenido, de forma que, si por alguna razón cambia, automáticamente el identificador es distinto.

Otro nivel de caché es la de generar de forma física los contenidos dinámicos y almacenarlos durante un tiempo concreto. De esta forma alguien genera la página, esta se almacena físicamente en el servidor. Mientras los tiempos correspondan, se sirve la versión generada hasta que toque regenerarse. En estos sistemas también se suelen usar sistemas de invalidación, de forma que por alguna acción concreta se puede regenerar la página. Por ejemplo, en un diario digital, si se actualiza la noticia, se podría eliminar y regenerar ese fichero en ese momento.

Existen capas de caché a otros niveles y para otros elementos que afectan a un sitio web, como por ejemplo las capas de caché en PHP (usando Opcode caché) o caché de base de objetos, del tipo Redis o Memcached.

Aunque si hablamos de caché lo más probable es que se optimice todo gracias a un sistema de web-proxy. Estos sistemas son una capa intermedia entre el usuario y tu servidor, lugar donde se almacena una copia de todos los contenidos de tu sitio. Mediante una serie de reglas el sistema guardará copias generadas que se podrán invalidar o que se podrán utilizar, aunque tu servidor esté saturado, quitando una gran carga de trabajo. Este sistema es muy útil sobre todo en aquellos proyectos en los que los usuarios no han de interactuar con extrema frecuencia. Como todo el sistema está pre calculado, el foco principal de este servicio es servir los contenidos lo más rápido posible. Algunos de los más conocidos son nginx, squid, Traffic Server o Varnish.