Si buscamos en internet una definición de qué significa «cache», encontraríamos algo como, que la cache sería un sistema que guarda datos para que, futuras peticiones puedan ser resueltas con mayor rapidez.

Y aunque esta definición nos deje un poco igual, en realidad, es esto lo que es exactamente la caché y como seguro no es suficiente como para entenderla vamos a tratar de explicarla un poco más en profundidad. 

Entendiendo el problema.

Como, brevemente, introduje antes sobre el significado de la caché, esta no es nada más y nada menos, que un sistema que nos ayudará a almacenar información repetitiva con el fin de que esta sea de más rápido acceso.

Para entender bien este concepto, vamos primero a ver cual es el problema con un ejemplo sencillo y a partir de ahí veremos cómo aplicando «cache» nuestro sitio o aplicación mejorará.

Vamos a imaginarnos que tenemos una web. Esta web, es una web sencilla, más bien informativa, en la cual no hay ningún tipo de interacción con el usuario. Es decir una web estática que muestra la misma información para todos los usuarios que la visitan.

Como norma general, si no configuramos ningún tipo de cache, lo que pasaría una y otra vez, es que cada vez que un usuario accediera a nuestra web, el apache, tendría que reclamar a la base de datos, la misma información repito una y otra vez.

Tanto wordpress (Query Monitor) como drupal (Web profiler de devel), poseen herramientas para poder saber cuantas consultas a la base de datos hace nuestro sitio web al cargar una página «básica». 

Si instalamos esos plugins en nuestros sitios y nos vamos al apartado de las «Queries», nos daríamos cuenta de la increíble cantidad de peticiones que hacen nuestros CMS a la base de datos, para lo que consideramos una página «básica».

Pues, a esa cantidad de peticiones, multiplicar la cantidad de usuarios que pueda tener o esperáis tener en la web y sí, el número da miedo, aunque creedme que al servidor le da más aun…

Sin duda este el principal problema de porque tu web carga tan lento, además de ser uno de los mayores quebraderos de cabeza para los de sistemas, sobre todo en ataques DDOS.

ddos 2
Un ataque DDOS, es cuando, generalmente un hacker, intenta acceder a nuestro sitio web, desde multiples dispositivos a la misma vez, con el único afán de consumir nuestro ancho de banda y consumir los recursos del servidor haciendo que este colapse y caiga.

Aplicando caché.

Y entonces, qué podemos hacer? Bueno, si hacemos un pequeño análisis de las consultas, veremos que se repiten una y otra vez y además nos daremos cuenta que siempre devuelve lo mismo.

Por lo general, wordpress y drupal y el resto de CMS tienen un buen sistema de caches integrado para evitar que las consultas más pesadas saturen tu servidor, pero estas medidas son insuficientes.

Y para eso aplicaremos diferentes estrategias dependiendo de nuestro proyecto, en nuestro ejemplo, dependiendo del CMS usaremos unos plugins extras para potenciar y minimizar al máximo nuestras consultas.

Para wordpress os recomiendo WP Fastest Cache y para drupal aunque es verdad que el sistema de cache por defecto (Activandolo en el apartado de rendimiento) ya es más que suficiente, instalaremos este plugin para reforzarlo, Advanced CSS/JS Aggregation.

Aunque estos plugins trabajan diferente en cada CMS, la finalidad es la misma, básicamente atacan al problema desde dos puntos de vista:

1- Optimizar archivos CSS y JS, lo que suelen hacer es comprimir al máximo su contenido para que la web sea más ligera y además se aseguran que tengan unos header de caches adecuados (esto lo veremos más adelante).

2- Generan un archivo con el HTML resultante, es decir, guardar una captura desde la perspectiva del HTML (con el html, css, js…) y lo guardan en un archivo, para que cuando accedas a la web, en lugar de hacer peticiones, carguen directamente la información desde ese archivo.

cache1

Como podemos intuir en el workflow, vemos que cuando nuestro CMS genera el «archivo» con la respuesta pre-generada, este no hace ninguna petición a la base de datos, haciendo la respuesta sea practicamente instantanea.

En ocasiones, podemos encontrarnos que esta respuesta pre-generada, no se encuentre en un archivo, si no en la base de datos (Drupal trabaja así por defecto). Es decir almacena toda la información en un aparto de la base de datos, haciendo que únicamente se ejecute una consulta en lugar de miles. 

A partir de aquí podemos jugar con miles de combinaciones, en función de los requerimientos de nuestro proyecto .

Entendiendo la cache.

Lo que acabamos de hacer, es lo que, exactamente, definimos al principio del artículo. Hemos conseguido que cierta información sea servida de una forma más rápida y eficaz.

Consiguiendo varios objetivos, uno, que la carga de nuestra web, sea más rápida y dos, que nuestro servidor trabaje mucho menos y sea capaz de soportar mucha más carga de trabajo.

Supongo, que ahora, entenderéis porque en ocasiones realizamos cambios en nuestra web y no se ven reflejados y cuando limpiais las «caches» estos datos aparecen como por arte de magia.

Bien, pues, a esta «porcion» de codigo que generamos y almacenamos en algún sitio es a lo que nos referimos cuando hablamos de caché, ya que el acceso a esta información es mucho más rápida y efectiva que realizar miles de consultas a la base de datos.

Un mundo de estrategias por delante.

Lo que hemos visto hasta ahora, no es más que punta del iceberg, esto es simplemente mejorar la configuración de nuestro sitio web, apenas hemos empezado a rascar todo lo que las caches pueden dar de sí.

En este mundo, hay diferentes tipos de caches, diferentes modos de aplicarlas, diferentes sitios donde guardarlas y lo más importante, los headers de caché.

En el próximo artículo, os explicaré al detalle qué tipos de caches existen, que son los headers de caché y veremos por encima que es una CDN y en qué nos puede ayudar.

Conclusión.

Espero que os haya parecido interesante este artículo que no es más que el primero de unos cuantos más que escribiré, ya que el mundo de la caché es muy amplio y complejo.

También, estoy convencido de que ya empezáis a ver la importancia de tener un buen sistema de cache, ya que esto nos favorece mucho tanto a la hora de la carga como de puntuación en analytics.

Si crees que hay algo que no queda del todo claro, porfavor comentar este artículo y tratare de mejorarlo.