Aprende como funciona la caché de Joomla

Cualquier sistema de gestión de contenidos dinámicos va a hacer trabajar duramente al servidor. Logicamente,  Joomla no es una excepción.

Sin embargo, la mayoría de los sitios web tienen contenido que cambia con muy poca frecuencia, y sobre el que pueden emplearse técnicas de caching para reducir la necesidad de cargar todo ese contenido cada vez que la página es visitada. Aprende cómo funcionan los tres niveles de caching disponibles en un sitio basado en Joomla! 1.5.

La idea que hay detrás del uso de la caché es sencilla. Una vez que te has tomado la molestia de ejecutar un componente, un módulo, o incluso de cargar la página entera, tiene sentido hacer una copia del resultado de esta carga y reutilizarlo si es posible, sin necesidad de pasar por todo el proceso de carga de nuevo cuando los visitantes cambian de página mientras visitan tu sitio web. Por defecto, Joomla no cachea ningún contenido. Esto significa que cada vez que alguien visita una página de tu sitio, todas las tareas de computación necesarias para construirla se repiten una y otra vez, incluso si no hay absolutamente ningún cambio en el resultado final que se le presenta al visitante. Para evitar esto, Joomla proporciona 3 niveles de caché:

  1. Caché de página
  2. Caché de vista
  3. Caché de módulo

Vamos a analizarlos con detalle.

¿Qué es la caché de página?

La caché de página es aquélla en la que Joomla hace una copia de una página completa cuando ésta se muestra por primera vez. Si esta página es visitada de nuevo, simplemente se toma esta copia que se guardó y se vuelve a mostrar, evitando la mayoría del código y muchas de las consultas a la base de datos necesarias para construirla desde cero de nuevo.

La caché de página es gestionada por el System Cache Plugin que es proporcionado de serie con Joomla. Para activarlo, inicia sesión en la parte administrativa de Joomla y escoge Extensiones -> Administrador de Plugins en el menú. Cambia el filtro de tipo a "system" para encontrar el plugin con facilidad (o simplemente busca "cache" en la caja de texto de los filtros).

Haz clic en el icono de la columna "Enabled" para ponerlo en marcha.

Si editas el Plugin verás que tiene dos opciones:

1º.- Use Browser Caching/ Utiliza las funciones de caché de navegadores

El texto de ayuda para este parámetro es un poco críptico:

"Si marcas sí, usa el mecanismo para guardar caché de las páginas en los navegadores"

Lo que esto significa realmente es que si activas esta opción, Joomla enviará una cabecera "304 Not Modified" al navegador si la página ha sido almacenada en caché previamente. Esto le dirá a tu navegador que la página no ha cambiado desde tu última visita, y evita que se envíe una petición nueva  al servidor para obtener los contenidos de la página (asumiendo, claro está, que el navegador ha almacenado una copia en su última visita). Este tipo de caching es útil si los visitantes van a volver muchas veces a alguna página mientras navegan por tu sitio. En ese caso, cuando traten de volver a esa página que han visitado previamente, ésta cargará con rapidez. Si los visitantes generalmente no visitan cada página más de una vez durante su sesión de navegación en tu sitio, esta opción no será realmente una ventaja.

2º.- Vida del caché

Este es el tiempo, en minutos, que se almacenará la copia de la página antes de que se refresque, -se vuelva a cargar-, por completo. La elección del tiempo depende de la frecuencia con la que el contenido es actualizado. Si en tu sitio aparecen noticias cada pocos minutos, será recomendable mantener este parámetro en un valor bajo, en algunos casos de un solo minuto. Si lo normal es que actualices el contenido de tu web una vez al día, puedes escoger un tiempo de refresco de varias horas. No olvides los módulos dinámicos y el contenido que muestran al hacer los ajustes del tiempo de caché. Ten en cuenta que, aunque sólo actualices el contenido una vez al día, o incluso una vez a la semana, si en tu sitio empleas un sistema de comentarios enlazado a un módulo de "últimos comentarios", y éstos aparecen, por ejemplo, con una frecuencia media de 10 minutos, entonces tendrás que ajustar tu tiempo de caché a un valor de entre 3 y 5 minutos, de forma que los cambios en tus comentarios aparezcan reflejados en tu página en un tiempo apropiado.

Análisis del rendimiento de la caché de página

Los siguientes resultados son de analizar un sitio Joomla 1.5.14 en un entorno de desarrollo local instalado en un portátil (Macbook Pro 2.1.6 GHz Core Duo con 2 Gb de RAM, PHP 5.2.6, MySQL 5.0.41). Los resultados fueron compilados activando el Plugin System Debug  (y realizando unos pequeños cambios para hacer que los resultados se mostrasen bajo caché debido a un bug en el plugin).

SEF Off, System Cache Plugin Off

Application afterLoad:       0.000 seconds, 0.24 MB

Application afterInitialise: 0.072 seconds, 3.72 MB

Application afterRoute:      0.114 seconds, 5.46 MB

Application afterDispatch:   0.165 seconds, 6.86 MB

Application afterRender:     0.667 seconds, 7.98 MB

SEF Off, System Cache Plugin On

Application afterLoad:       0.000 seconds, 0.24 MB

Application afterInitialise: 0.077 seconds, 3.79 MB

Application afterCache:      0.080 seconds, 3.97 MB

La mejora es significativa, ya que la activación de la caché hace que el contenido cargue unas 8 veces más rápido usando la mitad de memoria. Hay que tener en cuenta que esta prueba constituye un test en condiciones de carga cero (en otras palabras, en condiciones ideales), de manera que muestra el mayor incremento de rendimiento posible que puedes obtener al activar la caché de página. En un servidor en condiciones de trabajo estándar normalmente no podrás ver una mejora tan grande, menos aún si se trata de un entorno de hosting compartido, pero el efecto será de todas formas apreciable (ten en cuenta que, si tus páginas tienen módulos pesados, el incremento del rendimiento va a ser notable).

Cosas a controlar al usar la caché de página

Hay una serie de cosas que deberías tener en cuenta antes de activar el plugin de caché. Ésto incluye:

  • No se ejecuta para la parte administrativa.
  • Solo funciona para los invitados de tu sitio (no para los que inician sesión)
  • No se aplica a los formularios que usan el método POST (lo que es bueno)
  • Reemplaza el security token con el valor correcto en caso de que sea necesario (otra cosa buena)
  • Añade una marca de perfil llamada afterCache (pero debido a un bug, nunca la verás)
  • Almacena una copia completa de la página después de que ésta haya sido renderizada basándose en la URL, de forma que funcionará para cualquier URL única, sea cual sea el componente
  • Los hits de los artículos no se contarán cuando la caché de página esté activada (haciendo no efectivo cualquier sistema de ordenación basado en hits)
  • El contenido dinámico basado en Javascript, como Google Analytics o Google Adsense, seguirá funcionando
  • La caché de página no funciona si la opción "Sistema de depuración de errores" de la configuración global marca la opción "Sí".

Las páginas cacheadas son almacenadas en la carpeta /cache/page/. Si tienes un sitio muy grande en una cuenta de hosting compartida necesitarás vigilar tu cuota de disco.

Limpiando la caché de página

A veces es preciso limpiar la caché de página para poder ver los cambios recientes que hayas hecho en el sitio. Para limpiarla, ve hasta Herramientas -> Limpiar la caché en el menú de la parte administrativa. Marca la casilla que hay junto al elemento de la lista llamado "página", y haz clic en "Borrar" en la barra de herramientas de la parte superior derecha.

Caché de módulo y de vista

La caché de módulo y de vista es diferente a la de página porque sólo almacena copias de ciertas partes de la página. Joomla continúa analizando y renderizando la plantilla, pero se produce una mejora en el rendimiento ya que partes de la página pueden ser recuperadas con rapidez.

La caché de módulo y de vista se controla a través de la sección Configuración de caché en la pestaña "Sistema" de la Configuración Global.

Estos parámetros permiten activar la caché, establecer el tiempo de caché (en minutos) y el administrador de la misma (normalmente se usarán ficheros, a menos que tengas cierto software específico instalado en tu servidor).

Caché de vista

La caché de vista sólo es soportada por los componentes que la activen a través de su arquitectura MVC. El único componente que la activa directamente en la pila de Joomla es el componente de Artículos, pero sólo para invitados (visitantes que no han iniciado sesión) y sólo si no están accediendo a una página del tipo "Categoría Blog" (la razón por la cual esta vista no lo utiliza es algo que se me escapa). Muchas de las extensiones de JXtended soportan también la caché de vista.

La caché de vista captura una copia de la salida del componente antes de que sea enviada a la plantilla para ser renderizada. Esto va a ser útil si para generar la página se le va a exigir mucho trabajo al procesador (si hace trabajar duro al servidor web).

Al igual que con la caché de página, la caché de vista está unida a la URL.

Caché de módulo

Todos los módulos deberían tener una opción de Caché, colocada normalmente en el panel de parámetros avanzados, así como otra opción para establecer el tiempo, en minutos, que deberá ser guardada en la caché esta copia de la salida del módulo. Si las tienen, la opción de activación de la caché va a ofrecer dos posibilidades: "Usar Global", en cuyo caso se usará la configuración establecida en la Configuración Global del sitio, o bien "No guardar en la caché". Esto te va a permitir tener tres combinaciones diferentes para tu sitio:

  1. La configuración global de la caché está en Off, de forma que ningún módulo guarda su salida en caché.
  2. La configuración global de la caché está en On, de forma que todos los módulos que usen la configuración "Usar Global" serán almacenados en caché.
  3. La configuración global de la caché está en On, pero los módulos pueden optar individualmente por quedar fuera del caching, seleccionando la opción "No guardar en caché"

Es importante resaltar que esta configuración de la caché es diferente de la que realiza el plugin de caché del sistema. Realmente, no existe ninguna relación entre ambas, excepto por el hecho de que el plugin de caché tiene prioridad. Dicho de otra forma, cuando el plugin de caché del sistema está activado, una copia de la página entera, incluyendo los módulos, es almacenada. Cuando la página se sale de la caché, no hay ningún proceso para comprobar si algún módulo estaba configurado para no ser almacenado en la caché.

Hay muchos módulos para los que deberías escoger la opción "No guardar en caché"

El módulo de menú generalmente no debería almacenarse en caché a no ser que se configure para no expandirse (en otras palabras, permanece abierto todo el tiempo). Dependiendo de cómo se configuren los módulos de menú tipo split, estos tampoco deberían ser cacheados. Si guardas en caché un menú expandible o de tipo split, es posible que se quede atascado y confunda a tus visitantes.

Los módulos que rotan el contenido de su interior, como el módulo de banners, tampoco deberían ser almacenados en la caché. Si son cacheados, permanecerán mostrando el mismo contenido hasta que la caché expire. Una excepción, como ya dijimos, son los módulos de anuncios que usan javascript para mostrar su contenido (como Google Adsense). Estos no se ven afectados por la caché.

El módulo de encuestas no debería ser cacheado, o te arriesgarás a que aparezcan mensajes del tipo "Invalid token" cuando alguien vote.

Los módulos que muestren contenido altamente dinámico deberían usar el valor "No guardar en la caché" o establecer un valor muy bajo en el "Tiempo de caché" (de uno o de muy pocos minutos).

La caché de módulo funcionará sea cual sea el tipo de visitante, sea invitado o un usuario con sesión iniciada.

Notas para desarrolladores de módulos

Los desarrolladores de módulos deben tener en cuenta que la caché de módulos es manejada por el renderizador de módulos en la clase JDocumentRendererModule. Si no se proporciona una parámetro de caché, el módulo nunca podrá ser cacheado, independientemente de la configuración establecida en la Configuración Global del sitio. Para permitir que tu módulo sea cacheado, debes incluir el siguiente parámetro en el archivo XML del módulo:

name="cache"
type="list"
default="1"
label="Caching"
description="Select whether to cache the content of this module">
value="1">Use global
value="0">No caching

Fuente: theartofjoomla.com

Síguenos en:

Extensiones

We like Twitter

Copyright © 2014 Joomla Empresa. Todos los derechos reservados.
Joomla! es software libre, liberado bajo la GNU General Public License.