Entradas

Cómo instalar Full page cache en Magento 1X y no morir en el intento

, , ,

La velocidad de carga de una web es una de las variables más importantes a tener en cuenta, y si la web es una tienda de comercio electrónico, su importancia es crítica.

El sistema de cache de Magento nativo es una opción válida pero es (muy) mejorable. Existen diversos módulos comerciales para Magento que ofrecen distintos tipos de cache adicionales, pero en este artículo vamos a enseñar como instalar un módulo de Full page cache GRATUITO en nuestro Magento.

Este módulo aumentará la velocidad de carga de nuestro Magento 1X de forma considerable.

En esta guía se utilizan algunos términos intermedios de Magento como los handlers. Pero como sabemos que no tienes tiempo y quieres ir al grano, te lo vamos a dar bastante masticado para que no te atragantes. De nada.

¿Qué es Full page cache?

Full page cache (fpc) es una cache interna, que no necesita Varnish u otro software externo. Funciona con eventos, reemplazando dinámicamente los bloques html que componen una página antes de que sean enviados al usuario.

Existen varios módulos comerciales para Magento que implementan esta funcionalidad, pero en esta guía vamos a abordar uno totalmente gratuito llamado LestiFPC.

Instalar Magento Lesti FPC

La página oficial del módulo es https://github.com/GordonLesti/Lesti_Fpc.

Si optamos por la instalación manual, una vez hayamos descargado el archivo, lo descomprimimos en la raíz de Magento. De esta manera tendremos una nueva carpeta llamada ‘Lesti’ dentro de app/code/community.

Huelga decir que SIEMPRE haremos la instalación en nuestro servidor de desarrollo para su posterior despliegue al servidor de producción, una vez hayamos revisado a fondo la integración del módulo con nuestro Magento. Si no tienes servidor de desarrollo haz una pausa en este punto, instálate uno y te evitarás futuras situaciones de stress. Tu salud nos lo agradecerá.

Configurar Magento Lesti FPC

Una vez instalado, hacen falta una serie de configuraciones básicas que varían sobretodo en función de la plantilla instalada. Accedemos a la configuración del módulo desde Sistema > configuración > Pestaña Avanzado > sistema.

Configurar Magento Lesti FPC

Vamos a analizar las opciones de configuración más importantes:

Cachable actions

Estos son los handlers que por defecto fpc va a cachear.


¡Socorro! ¿Handlers?¿Qué es un handler?

Un handler es un nodo dentro de los archivos layout que tiene Magento, y define un manejador de acción, como por ejemplo, la acción que muestra la ficha de un producto. Si abrimos el archivo app/design/frontend/<ruta_nuestro_tema>/layout/catalog.xml veremos el siguiente nodo:

<catalog_product_view>

 <label>Catalog Product View (Any)</label>
        <!– Mage_Catalog –>
        <reference name=»root»>
            <action method=»setTemplate»><template>page/2columns-right.phtml</template></action>
        </reference>
        <reference name=»head»>

…..

 Esto identifica la acción ‘View’ del controlador ‘product’ del módulo ‘catalog’. Traducido al patrón MVC , si entramos en la carpeta app/code/core/Mage/Catalog/controllers/ encontraremos un archivo llamado ProductController.php, y dentro del mismo, una función llamada viewAction. Esta es la función encargada de renderizar la pantalla de un producto.


Por defecto vienen preconfigurados los siguientes handlers:

  • cms_index_index
  • cms_page_index
  • catalog_product_view
  • catalog_category_view

Es decir, se van a cachear las páginas cms, las categorías del catálogo y los productos. Si tuviéramos otro módulo que quisiéramos cachear, por ejemplo un blog, tendríamos que añadir su handler a esta lista. Por ej.:

blog_post_list
blog_post_view

Si no tenemos ningún módulo no nativo a Magento, en principio no es necesario añadir nada más. Si tenemos los típicos módulos que habilitan un carrito en Ajax, tendríamos que identificar los handlers correspondientes para añadirlos a esta lista.

Dynamic & Lazy blocks

Como es obvio, hay cierta información de la página que no queremos cachear, o no la queremos hacer global para todos los usuarios, ya que puede ser información específica para cada cliente. Un ejemplo puede ser el bloque del carrito lateral: cada usuario tendrá un contenido distinto. Otro ejemplo podría ser un bloque de bienvenida que mostrara el nombre del usuario registrado, tipo ‘Bienvenido John Doe’.

Para ellos, Lesti Fpc distingue entre dos tipos de bloques, dynamic block y lazy block.

 Dynamic block

 Un dynamic block, no se va a cachear NUNCA, de modo que siempre se va a refrescar cuando se renderice la página. Un ejemplo puede ser el bloque de notificaciones de Magento. Las notificaciones se muestran una vez y desaparecen, por lo que no es necesario cachearlo.

Si queremos evitar que un bloque se cachee, deberemos añadirlo en una nueva línea en este campo.


Mi no entender, ¿qué es lo que hay que añadir a este campo?

El valor que hay que añadir a este campo, es el atributo name del block que viene definido en el xml. Por ejemplo, si queremos definir el bloque del formulario de contacto como dynamic block, abrimos su layout (archivo app/design/frontend/<ruta_nuestro_tema>/layout /contacts.xml):

<contacts_index_index translate=»label»>

<reference

name=»content»>

<block

type=»core/template»

name=»contactForm»

template=»contacts/form.phtml»/>

</reference>

….

Y veremos que el nombre del bloque es ‘contactForm’. Ese es el valor que tendremos que añadir a la lista para que Lesti Fpc no lo cachee.


Lazy block

Un lazy block es un bloque que siendo distinto para cada usuario, es deseable que se cachee durante un periodo determinado. Por ejemplo, el bloque del carrito de usuario, es único para cada persona, pero queremos que Magento lo cachee hasta que se añada o se elimine algún producto del mismo.

Es decir, si añades un producto, se genera la cache con ese producto, y hasta que no añadas otro producto, elimines el actual, o modifiques valores del carrito como la cantidad, no se volverá a generar ese bloque. Lo cargará desde la cache.

Por defecto vienen ya preconfigurados varios lazy blocks nativos de Magento, como el carrito lateral, la lista de comparación, la lista de artículos deseados, los enlaces de la cabecera, el bloque de bienvenida y el bloque de encuestas.


TIP:

Las plantillas comerciales generalmente reescriben el carrito lateral, o añaden uno en la cabecera, por lo que es probable que sea necesario añadirlo a esta lista.


Refresh actions

Necesitamos un mecanismo para indicar cuándo se van a refrescar los lazy blocks. Para ello usamos este campo, e indicamos los handles para los cuales se refrescará la cache. Por ejemplo, hemos dicho que cuando se añada un producto al carrito, se refrescará el bloque del carrito, por lo que habrá un handle “checkout_cart_add”.

El modulo ya viene preconfigurado con todas las acciones necesarias, por lo que no suele ser necesario añadir ninguna nueva.

Url params

Los siguientes campos se utilizan para la indexación interna de fpc, por lo que no es necesario manipularlos.

Como información extra, son campos que fpc utiliza para generar un hash que identifique a cada bloque cacheado.

Miss params y category sesión params

Estos parámetros se utilizan para no cachear ciertas peticiones, como, por ejemplo, el ordenar un listado. Fpc utiliza estos campos para poder refrescar listados en función del número de elementos, la ordenación, etc. Por lo general no es necesario modificar nada en estas secciones.

Bypasshandler

Este campo lo podemos utilizar para evitar que se cachee una cierta categoría. Para ello añadiríamos CATEGORY_25, por ejemplo, para no cachear la categoría con id 25.

Customer group caching

Si tenemos distintas layouts o distintos precios para cada grupo de clientes, se lo indicaremos a fpc desde este campo:

Anotaciones finales

Fpc crea una nueva entrada cache que se puede gestionar desde el sistema general de cache de Magento (sistema->gestión de la cache).

el sistema general de cache de Magento

Desde aquí podemos activarla/desactivarla.

Es imprescindible verificar con distintos usuarios logueados que todos los bloques muestran la información correcta en todo momento. Un error de cacheo de un bloque puede derivar en que un usuario vea el carrito de otro usuario distinto.

Por supuesto, si quieres evitarte problemas y dolores de cabeza, puedes delegar la instalación, configuración y optimización de tu Magento a Gsoft, profesionales con más de 10 años de experiencia en esta tecnología.