Explicación de la optimización del rendimiento de Magento
Publicado: 2022-03-11El rendimiento de Magento es de suma importancia. La velocidad de carga tiene un impacto directo y medible en la tasa de conversión de su sitio web, por lo que tener una instalación optimizada de Magento es crucial para el éxito de su tienda Magento y posiblemente incluso de su negocio en general.
En este artículo, presentaré algunas formas en que los desarrolladores de Magento pueden optimizar su instalación de Magento 2 y explicaré cómo hacer lo siguiente:
- Compruebe módulos de terceros y encuentre cuellos de botella
- Habilitar caché de página completa
- Barniz, no archivos para caché de página completa
- Asegúrese de que el caché de página completa funcione, se puede romper muy fácilmente
- Habilitar el modo de producción
- Minificación de CSS/JS
- Habilitar tablas planas
- Obtenga el alojamiento más rápido que pueda pagar
- Optimizar imágenes
- Indexadores para "Actualizar según el cronograma"
- Compresión GZIP
- Use Elasticsearch en las páginas del catálogo y busque.
- Compruebe si hay llamadas Ajax innecesarias al servidor después de cargar la página (puede causar bloqueos de sesión)
- Redis para caché de página y almacenamiento de sesión
Comprobar módulos de terceros y encontrar cuellos de botella
Hay muchos módulos de Magento de terceros con código incorrecto, que utilizan métodos obsoletos o que tienen problemas de compatibilidad con la última versión estable de Magento. La mejor manera de identificar solicitudes pesadas es usar un generador de perfiles. Eso lo ayuda a identificar cuántas consultas de MySQL tiene en una página y cuántas son idénticas. Sabiendo eso, puede compactar esas consultas en una sola y, por lo tanto, acelerar Magento.
Una de las principales cosas que los desarrolladores junior están haciendo mal en Magento es cargar modelos dentro de bucles. Trate de evitar eso tanto como pueda. Cargue toda la colección con todo lo que necesita y luego revísela. Tenga siempre en cuenta la complejidad del tiempo y el espacio y construya su algoritmo de forma optimizada.
Mire cómo se carga su diseño y cuáles son los bloques de plantilla que funcionan más lentamente, luego mire ese código. Mire las métricas de Model CRUD donde puede encontrar datos útiles, como cargar llamadas en bucles.
Caché de página completa de Magento
Cuando un usuario accede a su tienda, se realiza una solicitud al servidor. Esta solicitud es procesada por PHP realizando operaciones específicas y consultas a la base de datos y luego devolviendo el HTML correspondiente para que se muestre al usuario. La memoria caché de página completa almacena esa respuesta HTML, de modo que la siguiente solicitud idéntica la devolverá directamente omitiendo todo el procesamiento de back-end y las consultas de la base de datos. Esto hace que la respuesta del sitio web sea mucho más rápida.
El uso de caché de página completa como parte de sus esfuerzos de optimización de Magento puede aumentar enormemente la velocidad de su sitio web. Esto creará versiones en caché de sus páginas y las entregará al usuario en lugar de ejecutar todas las consultas para cada solicitud. Por supuesto, no todas las páginas se almacenan en caché. Por ejemplo, la página del carrito no se almacenará en caché; de lo contrario, todos los usuarios verán la primera versión almacenada en caché de la página. Estas son páginas dinámicas o secciones de páginas que son específicas del usuario y de la sesión.
Para habilitar el caché de página completa de Magento, puede ejecutar el siguiente comando CLI:
php bin/magento cache:enable full_page
Para habilitar los tipos de caché, puede ejecutar el comando CLI:
php bin/magento cache:enable
También puedes hacerlo desde Magento Admin iniciando sesión como administrador:
- Vaya a Sistema > Herramientas > Administración de caché
- Seleccione el tipo de caché que desea activar
- En el menú desplegable Acciones , seleccione Habilitar y haga clic en Enviar
Use Varnish para caché de página completa
Cuando habilite el caché de página completa, use Varnish para manejarlo, no archivos. Magento recomienda enfáticamente usar Varnish (o Redis) en producción. El almacenamiento en caché de página completa integrado (ya sea en el sistema de archivos o en la base de datos) es mucho más lento que Varnish, y Varnish está diseñado para acelerar el tráfico HTTP.
Puede encontrar una guía completa sobre cómo instalar y configurar Varnish en la documentación oficial de Magento 2.
Para configurar Magento para usar Varnish, inicie sesión en Magento Admin como administrador:
- Vaya a Tiendas > Configuración > Avanzado > Sistema > Caché de página completa
- En la lista de aplicaciones de almacenamiento en caché , haga clic en Varnish Caching
- Ingrese un valor en el campo TTL para contenido público
- Expanda Configuración de Varnish e ingrese la información específica sobre su configuración de Varnish
Asegúrese de que la caché de página completa funcione: se rompe fácilmente
El caché de página completa se puede romper fácilmente en Magento 2. Por ejemplo, si desea excluir un bloque del caché, no use el atributo cacheable="false"
en el diseño XML al declarar su bloque. Esto deshabilitará el caché para toda la página que contiene ese bloque, no solo para ese bloque. Ese es un error que he visto cometer a la gente.
Busque el atributo cacheable="false"
en sus diseños y vea en qué bloques están configurados y en qué páginas se llaman esos bloques. Por lo tanto, puede identificar si las páginas triviales tienen problemas con el caché.
También puede probar si su página se almacena en caché manualmente o no. Ponga la tienda en modo de desarrollador en su entorno local o de escenario:
- Borrar caché de Magento
- Cargar la página en el navegador
- Inspeccione los encabezados de página en la pestaña de red de depuración de su navegador.
- Busque X-Magento-Cache-Debug: MISS
- Actualice la página, debería cambiar a HIT
Si no cambia a HIT, significa que la página no está en caché y el caché no funciona.
No olvide habilitar el modo de producción
Magento tiene tres modos de ejecución, predeterminado , desarrollador y modo de producción .
El modo de producción está diseñado para su implementación en un sistema de producción. Este modo oculta las excepciones, sirve los archivos estáticos solo desde el caché y no le permite habilitar o deshabilitar los tipos de caché en Magento Admin. También evita la compilación automática de archivos de código.
Mientras trabaja y desarrolla la tienda, el modo desarrollador está activo. ¡No olvide cambiar al modo de producción cuando implemente su sitio en el servidor en vivo!
El comando CLI para ver el modo actual es:
php bin/magento deploy:mode:show
El comando CLI para cambiar al modo de producción es:
php bin/magento deploy:mode:set production
El comando CLI para cambiar al modo desarrollador es:
php bin/magento deploy:mode:set developer
Puede encontrar información más detallada sobre los diferentes modos de Magento aquí.
Minificación de CSS/JS
Minimizar los archivos CSS y JS es un elemento importante de la optimización de velocidad de Magento 2. Al minimizarlos, eliminamos todos los espacios, tabulaciones y saltos de línea en los archivos. Los archivos resultantes tendrán menos caracteres y, por lo tanto, un tamaño más pequeño, por lo que se descargarán más rápido.
Magento tiene esta función incorporada y puede habilitar la minificación de CSS/JS en Admin. Para habilitar la minificación de JavaScript, siga estos pasos:
- poner Magento en modo de producción
- Vaya a Tiendas > Configuración > Avanzado > Desarrollador
- Establezca la opción Minificar archivos Javascript en Sí
- Guardar configuración
- Vaciar caché en la página Sistema > Administración de caché
Para habilitar la minificación de CSS, se requieren los siguientes pasos:
- poner Magento en modo de producción
- Vaya a Tiendas > Configuración > Avanzado > Desarrollador > Configuración de CSS
- Establezca la opción Minificar archivos CSS en Sí
- Guardar configuración
- Vaciar caché en la página Sistema > Administración de caché
Nota: No combine archivos JS, solo minimícelos .
Habilitar tablas planas
Magento utiliza el modelo EAV (valor de atributo de entidad) que almacena los atributos de sus entidades en varias tablas según su tipo de valor. El uso de varias tablas, las uniones y las solicitudes en varias tablas son necesarias para recuperar los datos, lo que puede ralentizar las consultas.
Magento tiene la opción de usar tablas planas para el catálogo y los productos. Las tablas planas se crean fusionando todos los atributos de una entidad en una sola tabla. A la hora de solicitar los datos necesitamos consultar una tabla, haciéndolo mucho más rápido.
Magento genera y actualiza tablas planas en cada indexación. Puede habilitar tablas planas iniciando sesión en Magento Admin como administrador:
- Vaya a Tiendas > Configuración > Catálogo > Catálogo > Escaparate
- Seleccione Sí para Usar categoría de catálogo plano
- Seleccione Sí para usar un producto de catálogo plano
- Guardar configuración
Elija alojamiento rápido de Magento
Consulte los requisitos mínimos de Magento y vea si su servidor los cumple. Puede ver los requisitos oficiales de la pila de tecnología Magento 2.2.x aquí.
La configuración del alojamiento es muy importante para el rendimiento de Magento 2. También hay servicios de alojamiento dedicados para Magento, aunque estos pueden tener más que ver con el marketing que con cualquier otra cosa.
En pocas palabras: obtenga la solución de hospedaje más rápida que pueda pagar, a menos que sea demasiado para su proyecto.
Optimización de imágenes de Magento
El tamaño de sus imágenes obviamente afecta la velocidad de su sitio web. Por ejemplo, si tiene una página de catálogo con 20 productos y cada imagen de producto tiene un tamaño de 1 Mb, eso hace que se descarguen un total de 20 Mb cuando se carga la página, y esto obviamente podría ser un problema en algunos escenarios (dispositivos móviles, ancho de banda limitado en ciertas regiones, etc.).
Comprueba si tus imágenes están correctamente optimizadas y si tienen una buena relación entre calidad y tamaño. Además, asegúrese de que el CSS no cambie el tamaño de sus imágenes, pero que el archivo de origen cambie el tamaño al tamaño específico que necesita.
Otra técnica es usar la carga diferida, lo que significa cargar sus imágenes después de que la página se haya cargado por completo, o mientras el usuario se desplaza por el catálogo.

También puede usar AWS o un CDN para entregar su contenido mucho más rápido. Echemos un vistazo rápido a las diferencias entre AWS, CDN y el alojamiento tradicional desde la perspectiva de la optimización de mapas de bits.
Alojamiento tradicional
La forma tradicional es almacenar su contenido, como imágenes, en el mismo servidor que su sitio web. Esto puede ocupar espacio en disco y una buena parte de su ancho de banda, creando una carga sustancial en el servidor. Obviamente, escalar con alojamiento tradicional puede ser un problema.
CDN (Red de entrega de contenido)
Una red de entrega de contenido generalmente se usa para reducir la carga de un servidor al servir parte del contenido del sitio web. Además de eso, brinda un alto rendimiento al entregar su contenido rápidamente y alta disponibilidad al usar múltiples redes para llamar.
AWS (Amazon CloudFront)
Amazon CloudFront es una red de entrega de contenido (CDN) de alta seguridad que brinda protección a nivel de red y de aplicación. Consulte este tutorial sobre cómo comenzar con AWS y entregar contenido más rápido.
Además, puede usar AWS para cambiar el tamaño de las imágenes sobre la marcha en función de las dimensiones pasadas a través de un parámetro de consulta. Para obtener información adicional, consulte este tutorial sobre cómo cambiar el tamaño de las imágenes con Amazon CloudFront y Lambda@Edge.
Configure los indexadores para "Actualizar según el cronograma"
Los indexadores de Magento se pueden configurar en dos modos: " Actualizar al guardar " o " Actualizar al programar ".
Cuando están configurados en "Actualizar al guardar" cada vez que guarda un producto, atributo o categoría, el índice específico comienza a ejecutarse. Los indexadores pueden consumir muchos recursos y eso podría ralentizar su servidor.
El mejor modo para configurar los indexadores es "Actualizar según el cronograma". De esta manera, está seguro de que son ejecutados por el trabajo cron en un momento específico que establezca. Elija un momento en que el tráfico en su sitio web sea bajo.
Puede ver el modo de indexación actual ejecutando el comando:
php bin/magento indexer:show-mode
O en Magento Admin yendo a:
Sistema > Gestión de índices
Puede cambiar el modo de los indexadores a "Actualizar a tiempo" ejecutando el comando:
php bin/magento indexer:set-mode schedule
Puede cambiar el modo de los indexadores a "Actualizar al guardar" ejecutando el comando:
php bin/magento indexer:set-mode realtime
Y aquí está en Magento Admin:
Sistema > Gestión de índices: seleccione todos los indexadores y, en el menú desplegable Acciones , seleccione "Actualizar según programación".
También configura las tareas programadas yendo a Admin para:
Tienda > Ajustes > Configuración > Avanzado > Sistema > Cron (Tareas programadas)
Expanda "Opciones de configuración de Cron para el grupo: índice"
Compresión GZIP
Gzip es un método de compresión de archivos para transferencias de red más rápidas. La compresión permite que su servidor web proporcione tamaños de archivo más pequeños que se cargan más rápido para los usuarios de su sitio web. Sin embargo, esto tiene un costo.
Mientras comprime un archivo, carga la CPU, y cuanto más comprime un archivo, más tiempo lleva el proceso. Aunque esto puede aumentar la carga de la CPU del servidor, también podría reducir sustancialmente el uso del ancho de banda. Con gzip, puede elegir entre diferentes niveles de compresión, que van del 1 al 9.
En el nivel 1, tiene el tiempo de compresión más rápido, pero una relación de compresión más baja. En el lado opuesto, en el nivel 9 tiene la tasa de compresión más alta pero una velocidad más baja. La configuración predeterminada de gzip usa el nivel 6, favoreciendo la compresión sobre la velocidad. Sin embargo, Nginx usa el nivel 1, favoreciendo la velocidad sobre el tamaño del archivo.
Para activar la compresión gzip y activar el módulo mod_deflate
de Apache, puede agregarlo actualizando su archivo .htaccess y descomentando las líneas apropiadas como se muestra a continuación. El módulo mod_deflate
comprime recursos estáticos en archivos más pequeños antes de transferirlos al navegador.
<IfModule mod_deflate.c> ############################################ ## enable apache served files compression ## http://developer.yahoo.com/performance/rules.html#gzip # Insert filter on all content SetOutputFilter DEFLATE # Insert filter on selected content types only AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript application/json image/svg+xml # Netscape 4.x has some problems... BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # Don't compress images SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary # Make sure proxies don't deliver the wrong content Header append Vary User-Agent env=!dont-vary </IfModule>
Use Elasticsearch en páginas de catálogo y búsqueda
Otra forma en que puede aumentar la velocidad de su sitio web es mediante el uso de Elasticsearch para las páginas del catálogo y los resultados de búsqueda. Configure su servidor Elasticsearch y conecte su tienda Magento a él. La búsqueda se vuelve mucho más rápida al usar Elasticsearch.
Esta guía oficial explica cómo puedes configurar Magento con Elasticsearch.
Para configurar Magento para usar Elasticsearch, inicie sesión en Magento Admin como administrador:
- Haga clic en Tiendas > Configuración > Configuración > Catálogo > Catálogo > Búsqueda de catálogo .
- En la lista de motores de búsqueda , haga clic en Elasticsearch o Elasticsearch 5.0+ como muestra la siguiente figura. (La opción Elasticsearch 5.0+ no está disponible para Magento 2.1).
Compruebe si hay llamadas Ajax innecesarias
Las llamadas al servidor después de la carga de la página pueden causar bloqueos de sesión. Una forma de verificar todas las llamadas Ajax que está haciendo su página es usar DevTools en Chrome. Puede abrirlo haciendo clic derecho en la página y seleccionando Inspeccionar.
Vaya a la pestaña de red y allí podrá filtrar la solicitud por XHR. Ahora puede ver todas las solicitudes de Ajax de la página y verificarlas para ver cuáles de ellas son necesarias en esa página en particular.
Redis para caché de página y almacenamiento de sesión
Redis es una solución de caché de back-end opcional para reemplazar Zend_Cache_Backend_File
, que se usa en Magento 2 de manera predeterminada.
¿Por qué usar Redis?
Usar Redis puede tener múltiples ventajas:
- Puede reemplazar memcached con Redis porque también se puede usar para el almacenamiento de sesiones de PHP.
- Redis admite el almacenamiento en disco y la replicación maestro/esclavo, que es una característica muy solicitada que no es compatible con memcached. La replicación evita un único punto de error y proporciona alta disponibilidad.
- Las operaciones de etiquetas no requieren un análisis completo de cada archivo de caché porque Redis funciona mediante la indexación de etiquetas en los archivos.
- El back-end admite la limpieza de caché basada en etiquetas sin bucles foreach.
También hay un inconveniente principal:
- Debido a que Redis es un almacenamiento en memoria, todos sus datos deben caber en la memoria, lo que significa que solo está limitado por la velocidad y la capacidad de la memoria RAM.
Configure Magento para usar Redis para el almacenamiento de sesiones
La siguiente es una configuración de muestra para agregar a <your Magento install dir>app/etc/env.php
:
'session' => array ( 'save' => 'redis', 'redis' => array ( 'host' => '127.0.0.1', 'port' => '6379', 'password' => '', 'timeout' => '2.5', 'persistent_identifier' => '', 'database' => '2', 'compression_threshold' => '2048', 'compression_library' => 'gzip', 'log_level' => '1', 'max_concurrency' => '6', 'break_after_frontend' => '5', 'break_after_adminhtml' => '30', 'first_lifetime' => '600', 'bot_first_lifetime' => '60', 'bot_lifetime' => '7200', 'disable_locking' => '0', 'min_lifetime' => '60', 'max_lifetime' => '2592000' ) ),
Puede consultar aquí todos los detalles sobre los parámetros y cómo hacer una verificación básica de que su instalación de Redis funciona bien junto con su Magento.
Configurar Magento para usar Redis para la página y el caché predeterminado
Hay dos formas de configurar Redis para la página y el caché predeterminado. Puede editar manualmente el archivo <Magento install dir>app/etc/env.php
o puede usar la línea de comandos, que es el método recomendado porque también proporciona validación.
Para el caché predeterminado, ejecute el comando:
php bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-<parameter_name>=<parameter_value>...
Especifique los parámetros que son específicos del almacenamiento en caché predeterminado de Redis.
Para el caché de la página, ejecute el comando:
Php bin/magento setup:config:set --page-cache=redis --page-cache-redis-server=redis.example.com --page-cache-redis-db=1
Este comando habilita el almacenamiento en caché de la página de Redis, establece el host en redis.example.com
y asigna el número de la base de datos a 1. Puede consultar todos los detalles en Magento DevDocs.
Optimización del rendimiento de Magento resumida
Hemos cubierto bastantes enfoques para la optimización del rendimiento de Magento 2, así que hagamos un resumen rápido.
Identificar y resolver cuellos de botella marcará una gran diferencia en el procesamiento de sus datos. El uso de caché de página completa y Varnish también mejorará la velocidad de su sitio web y acelerará el tráfico HTTP. Siempre debe usar Magento en modo de producción en su servidor en vivo, sin excusas. Use la minificación para disminuir el tamaño de los archivos CSS y JS, un archivo más pequeño se descargará más rápido y usará menos ancho de banda.
Habilite tablas planas para disminuir las solicitudes de la base de datos y mejorar el tiempo de respuesta de la base de datos. Optimice sus imágenes y use un CDN si es posible. Configure los indexadores para que se actualicen según lo programado y habilite el cron de Magento. Habilitar la compresión gzip también reducirá el tamaño de los archivos que se descargarán. El uso de Elasticsearch aumentará la velocidad de las páginas de su catálogo y la página de resultados de búsqueda se cargará mucho más rápido. Utilice Redis para la caché de páginas y el almacenamiento de sesiones, que es significativamente más rápido que el Memcache predeterminado.
Puede implementar todas estas recomendaciones o solo algunas que no haya usado hasta ahora. Incluso un par debería ser suficiente para mejorar el rendimiento de Magento, que con suerte debería transformarse en más conversiones.