Tutorial - Uso de la cache en Joomla! 1.5

Escrito por Isidro Baquero.

Cualquier sistema de gestión de contenidos dinámicos hace trabajar duro al servidor, y Joomla no es una excepción. Sin embargo, la mayoría de los sitios web tienen contenido que no cambia con mucha frecuencia, y sobre el que pueden emplearse técnicas de cacheo para reducir la necesidad de "reinventar la rueda" cada vez que la página es visitada. El presente artículo examina los tres niveles de cacheo disponibles en un sitio basado en Joomla! 1.5.

La idea que subyace en el uso de la caché es que una vez que te has tomado la molestia de ejecutar un componente, un módulo, o incluso de construir la página entera, tiene sentido hacer una copia del resultado de esta ejecución y reutilizarlo si es posible, sin necesidad de pasar por todo el proceso de ejecución. 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

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 es mostrada por primera vez. Si esa página es visitada de nuevo, simplemente se toma esta copia que se guardó y se muestra el resultado, 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 Plugin de Caché del Sistema (System Cache Plugin) que viene de serie con Joomla. Para activarlo, inicia sesión en la parte administrativa de Joomla y navega hasta Extensiones -> Administrador de Plugins en el menú. Cambia el filtro de tipo a "system" o "sistema", para encontrar el plugin más rápidamente (o directamente busca "cache" en la caja de texto de los filtros).

Administrador de pluins

Haz clic en el icono de la columna "Activado" para ponerlo en marcha (debe pasar de un icono de una bolita roja con un aspa blanca a una marca verde de "correcto").

Si editas el Plugin verás que sólo presenta dos opciones:

System cache plugin

Utiliza las funciones de caché de los navegadores

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

"Activa 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 nueva petición al servidor para obtener realmente la página (asumiendo que el navegador almacenara una copia en su última visita). Este tipo de cacheo sólo resulta útil si los visitantes tienen que volver siempre a ciertas páginas mientras navegan por tu sitio. En ese caso, cuando traten de volver a una página que han visitado previamente, puede dar una sensación de que el sitio responde un poco mejor. Si los visitantes no cargan normalmente cada página más de una vez durante su sesión de navegación en tu sitio, esta opción no proporciona realmente muchas ventajas.

Vida del caché

Este es el tiempo, en minutos, que se almacenará la copia de la página antes de que un refresco completo tenga lugar. La elección del tiempo depende la frecuencia con la que el contenido es actualizado. Si en tu sitio aparecen noticias cada pocos minutos, te convendrá mantener este parámetro en un valor bajo, incluso a veces tan bajo como un minuto. Si sólo actualizas el contenido de tu sitio una vez al día, entonces varias horas puede ser un valor más apropiado. Cuando ajustes el tiempo de caché necesitas tener en cuenta los módulos dinámicos y el contenido que estos muestran. A pesar de que es posible que sólo actualices manualmente el contenido una vez al día, o incluso una vez a la semana, si en tu sitio usas un sistema de comentarios enlazado a un módulo de "últimos comentarios", y dichos comentarios aparecen, en media, una vez cada 10 minutos, entonces tendrás que ajustar tu tiempo de caché en un valor tan bajo como entre 3 y 5 minutos, de manera que los cambios en tus comentarios aparezcan reflejados en tu página en un tiempo razonable.

Testeo del rendimiento de la caché de página

Los siguientes resultados son de testear 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 de Depuración del sistema (System Debug plugin), y realizando algunas modificaciones para hacer que los resultados se mostraran 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, pues la activación de la caché hace que el contenido se entregue 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 puede obtenerse al activar la caché de página. En un servidor en condiciones de trabajo estándar normalmente no podrás ver una mejora de esta magnitud, y mucho menos si se trata de un entorno de hosting compartido, pero el efecto será aún apreciable (aunque, si tus páginas hace un uso extensivo de módulos, el incremento del rendimiento puede ser notable).

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

Hay un número de cosas que deberías tener en cuenta antes de activar el plugin de caché. Entre ellas:

  • No se ejecuta para la parte administrativa (no mejorará la navegación por el backend)
  • Sólo funciona para los invitados de tu sitio (no para los registrados que iniciaron sesión)
  • No se aplica a los formularios que usan el método POST (lo cual es una buena noticia)
  • Reemplaza el "testigo de seguridad" (security token) con el valor correcto en caso de que sea necesario (lo cual es otra buena noticia)
  • 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 haya sido renderizada basándose en la URL, de modo 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 inefectivo 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 está configurada como "Sí".

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

Limpiando la caché de página

A veces necesitarás limpiar la caché de página para poder ver los cambios recientes que hayas hecho en el sitio. Para limpiarla, navega hasta Herramientas -> Limpiar la caché en el menú de la parte administrativa. Marca la casilla que hay junto al elemento de la lista llamado "page" o "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 guarda copias de ciertas partes de la página. Joomla todavía analiza y renderiza el template, pero se produce una mejora en el rendimiento debido a que partes de la página pueden ser recuperadas muy rápidamente.

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

Configuración global de Joomla!

Estos parámetros permiten activar la caché y establecer el tiempo de caché (en minutos), así como 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" (el motivo por el que esta vista no lo utiliza es algo que se me escapa). Muchas de las extensiones de JXtended también soportan la caché de vista.

La caché de vista captura una copia de la salida del componente antes de que sea enviada al template para ser renderizada. Esto puede ser útil si la cantidad de trabajo para generar la página es intensiva en el uso del procesador (esto es, hace trabajar duro al servidor web).

Como ocurría con la caché de página, la caché de vista está unida a la URL.

Caché de módulo

Todos los módulos tienen (y si no, deberían) una opción de caché, normalmente en el panel de parámetros avanzados, así como una opción para establecer el tiempo, en minutos, que deberá ser guardada en la caché esta copia de la salida del módulo (y, de nuevo, si tienen esta opción, deberían). La opción de activación de la caché ofrece 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 significa que tienes tres combinaciones disponibles para tu sitio:

  1. La configuración global de la caché está en Off, de modo que ningún módulo guarda su salida en caché.
  2. La configuración global de la caché está en On, de modo 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 no ser cacheados, 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. De hecho, la relación entre ambas es totalmente nula, excepto por el hecho de que el plugin de caché tiene prioridad. En otras palabras, 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 sale de la caché, no hay ningún proceso para comprobar si algún módulo estaba configurado para no ser almacenado en caché.

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

El módulo de menú generalmente no debería almacenarse en caché a menos 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 muy probable 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 caché. Si son cacheados, permanecerán mostrando el mismo contenido hasta que la caché expire. Una excepción son los módulos de anuncios que usan javascript para mostrar el contenido (como Google Adsense). Estos nos son afectados por la caché.

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

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

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

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 será cacheado, sea cual sea la configuración establecida en la Configuración Global del sitio. Para permitir que un módulo sea cacheado, debes incluir el siguiente parámetro en el archivo XML del módulo:

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

 

El presente tutorial es una traducción del original en inglés "Joomla Caching explained" realizada por Isidro Baquero para Gnumla.com y autorizada por The Art of Joomla!. Se permite su reproducción total o parcial, siempre y cuando sea para fines no comerciales y se incluya esta nota.

Sobre el autor
Isidro Baquero
Author: Isidro Baquero

Desde 2008 ha trabajado como freelance, fundamentalmente desarrollando sitios web basados en Joomla, aunque también como webmaster, gestor de comunidades o traductor del inglés al español de aplicaciones de software. Actualmente forma parte del equipo de SobiPro en Sigsiu.NET, donde desempeña labores de soporte, documentación, pruebas de software y traducción al español.

::- Contactar -::


Comentarios  

 
+1 #1 Fabian 28-10-2010 15:11
Excelente aporte!! espero la comunidad empiece a marchar mejor de mi parte entrare seguido!! saludos desde Uruguay!
Citar
 
 
0 #2 Unase Canada 03-06-2011 18:06
Gracias por el aporte, muy claro y muy facil de realizar, cosas como estas son las que realmente ayudan.
Citar
 
 
0 #3 adrian 07-07-2011 19:12
tengo un problema en joomla del administrador al momento de limpiar la cache no carga la pagina, q puedo hacer
Citar
 
 
0 #4 Casas 09-10-2011 00:23
Gracias por el tutorial amigo he estado con problemas con mi hosting pues mi web supera muy rapido el uso del cpu lo estraño es que mi web solo tiene unos 300 usuarios diarios, y me estan obligando a pasar servidor exclusivismo
Citar
 
 
0 #5 Miguel Angel Torres 14-12-2011 11:40
Excelente aporte. Me ha servido mucho esta explicación.
Muchas gracias
Citar
 
 
0 #6 Javier 01-02-2012 23:29
Muchas, gracias, un aporte genial, me pasaba lo mismo que a Casas y estaba desesperado y en el hosting no me ayudaban nada solo me decían que pagase más. Ole tú! ;)
Citar
 
 
0 #7 Vibradoras 09-07-2012 11:38
La lástima es que muchos módulos no traigan por defecto la opción de caché. Sería muy cómodo indicar el tiempo de caché deseado en el mismo módulo en todos los casos.
Citar
 
 
0 #8 elprofecibernetico 05-09-2012 19:37
muchas gracias en este preciso momento voy a poner en practica lo que aprendi. Espero que sigan adelante con tan buena información que en lo personal me ha sido de mucha utilidad.
Citar
 
 
0 #9 elprofecibernetico 03-03-2013 18:19
Muchas gracias, este artículo esta muy bien explicado. He aprendido mucho y lo pondré en practica ahora mismo.
Citar
 
 
0 #10 Diego 05-04-2013 21:23
Ha sido un post muy bien explicado, con muchos detalles.
Excelente.

Saludos.
Citar
 

Escribir un comentario

REGLAS APLICABLES A LOS MENSAJES
  • Los comentarios serán publicados una vez que hayan sido comprobados y aprobados por un administrador del sitio.
  • No están permitidos comentarios injuriosos o amenazadores.
  • No está permitido hacer spam.
  • Los enlaces que no vayan a sitios oficiales Joomla! o que no estén relacionados con el mensaje serán editados.