La lentitud de Prestashop puede provenir de varios problemas que tendrás que identificar.

Antes de empezar, necesitas saber por qué crees que tu Prestashop es lento. De hecho, si es porque tiene una mala puntuación en herramientas como Pagespeed Insights de Google o GTMetrix, entonces debería leer nuestro artículo sobre este tema específico: Comprender y mejorar la puntuación de Pagespeed de su tienda Prestashop . Si por el contrario se trata de una lentitud general de la tienda, e incluso en el backoffice, entonces es seguramente que su Prestashop tiene tiempos de respuesta demasiado largos, hablaremos de TTFB (Time To First Byte) demasiado lento. Este artículo le ayudará a identificar este problema de TTFB.

Compruebe la configuración de la página de rendimiento de Prestashop

Lo primero que hay que hacer es ir a la configuración del rendimiento de Prestashop en el menú "Configuración avanzada" y luego "Rendimiento". Entonces, compruébelo con nuestro artículo "Los ajustes correctos para mejorar el rendimiento de Prestashop ".

Eliminar los módulos innecesarios

Prestashop viene con un montón de módulos por defecto y algunos son inútiles o redundantes. Por ejemplo, si utiliza Google Analytics probablemente no necesite los numerosos módulos de estadísticas.

No dude en revisar su lista de módulos y preguntarse si cada uno es realmente necesario o no.

Hacer un perfil

El perfilado es la medición de varios datos durante la generación de una página. En Prestashop se puede medir el tiempo empleado, la memoria consumida, las consultas SQL ejecutadas, etc. durante la generación de las páginas de producto, las categorías, la página de inicio, etc. pero también en el lado del backoffice para la administración de la tienda. De hecho, la carga de las páginas también puede ser lenta en el back-office y es importante optimizarlas para pasar menos tiempo gestionando su tienda (¡y no volverse loco porque sea lenta!).

Perfilado SQL

Comienzo con el perfilado SQL porque resulta ser el más efectivo. De hecho, la mayoría de las ralentizaciones suelen ser causadas por consultas SQL mal optimizadas. Las ralentizaciones atribuibles al código PHP son raras a menos que involucren el procesamiento de una larga lista de archivos.

Prestashop ofrece un modo de "perfilado" que detallaré en la siguiente sección. Sin embargo, este modo no es completamente satisfactorio porque simplemente genera un "volcado" significativo de datos directamente en las páginas mostradas y no se puede activar para las solicitudes Ajax.

Por lo tanto, he desarrollado un módulo que registra todas las consultas enviadas al servidor MySQL, las analiza y las organiza para proporcionarle un informe detallado, destacando las consultas sospechosas que merecen su atención. Ya lo he probado con varios clientes que experimentaban ralentizaciones en su tienda Prestashop, y el módulo identificó de inmediato la causa de la ralentización.

El módulo se puede utilizar en producción porque su impacto en los visitantes es insignificante. De hecho, el perfilado solo está activo para el administrador que lo activa.

Esta funcionalidad está integrada en el módulo Speed Pack (Page Cache Ultimate + WEBP + SQL Profiling + Database cleaning) pero también está disponible como un módulo independiente: SQL Profiler .

Perfiles integrados en Prestashop

Para activar la creación de perfiles, modifique la constante _PS_DEBUG_PROFILING_ en el archivo /config/defines.inc.php.

Si la tienda está abierta a los clientes, puedes activar la herramienta sólo para ti especificando tu IP así:

define('_PS_DEBUG_PROFILING_', $_SERVER['REMOTE_ADDR'] == '37.123.456.789');

Puedes conocer tu IP en https://www.whatsmyip.org/

Una vez activada la creación de perfiles, verá que se muestran varias tablas en todas las páginas del back-office y del front-office. Repasemos juntos todos estos datos:

  • Tiempo de carga: es el TTFB, si es superior a 1 segundo (1000ms) se confirma un problema de TTFB largo
  • Tiempo de consulta: si es más del 50% del "Tiempo de carga", entonces tiene una consulta SQL demasiado lenta o ejecutada demasiadas veces o su servidor de base de datos no es lo suficientemente potente.
  • Consultas: es el número de consultas SQL ejecutadas, no te asustes, ¡en Prestashop es enorme!

No detallaré todo, sólo los datos importantes.

También encontrará una tabla con las columnas "Tiempo", "Tiempo acumulado", "Uso de memoria" y "Uso de pico de memoria" y las siguientes líneas:

  • config: representa la carga del CMS de Prestashop, si es muy lento aquí es que su servidor no es lo suficientemente potente o está mal configurado
  • _construct: tiempo empleado en el constructor del controlador
  • init: tiempo empleado en el método init() del controlador
  • checkAccess: tiempo empleado en el método checkAccess() del controlador que comprueba los permisos, normalmente 0 (o muy corto)
  • setMedia: tiempo empleado en el método setMedia() del controlador para añadir archivos CSS o javascript, normalmente muy corto
  • postProcess: tiempo empleado en el método postProcess() del controlador que permite guardar los datos de un formulario. Puede ser largo en función del formulario y de la tramitación a realizar. Debe ser 0 en una página de visualización clásica como productos, categorías, etc.
  • initHeader: tiempo empleado en el método initHeader() del controlador. Aquí es donde se recuperan los datos que se van a mostrar, aunque esto se suele hacer en la función initContent().
  • initContent: tiempo empleado en el método initContent() del controlador. Aquí es donde se llama al hook displayHeader de los módulos, así como al grueso del procesamiento que generará el contenido de la página web.
  • initFooter: tiempo empleado en el método initFooter() del controlador. A menudo está vacío porque pocos controladores hacen el procesamiento aquí.
  • display: tiempo empleado en el método display() del controlador. Este es el tiempo que tarda Smarty en renderizar la página, en otras palabras, el tiempo empleado en compilar las plantillas y rellenar los valores. Si el tiempo es largo, es posible que haya olvidado habilitar la caché de Smarty o que haya muchos elementos que mostrar. También podría ser un módulo o widget que es muy lento en uno de sus ganchos.

Lamentablemente en PS1.7 no hay más información sobre la ejecución de módulos y hooks, se ha cerrado un Pull Request #20673 pero no sé en qué versión se fusionará. Mientras tanto, si tienes Page Cache Ultimate puedes encontrar estos datos en la herramienta de perfilado incorporada.

La tabla"Cronómetro SQL - consultas xxx" enumera todas las consultas SQL ejecutadas, desde la más lenta hasta la más rápida. Personalmente considero que una consulta que supere los 100ms es lenta. Sin embargo, si el orden de magnitud de las duraciones es el mismo, es decir, si una sola consulta no destaca sobre las demás por su lentitud, entonces quizás sea el servidor MySQL el que no está rindiendo lo suficiente.

Perfiles proporcionados por el módulo Page Cache Ultimate

Nuestro módulo Page Cache Ultimate (également intégré au module Speed Pack (Page Cache Ultimate + WEBP + SQL Profiling + Database cleaning) proporciona una herramienta para medir el tiempo empleado por cada módulo en cada gancho. El procedimiento para analizar la lentitud de una página web es el siguiente:

  1. activar la creación de perfiles en la página de configuración de Page Cache Ultimate
  2. volcar los datos de los perfiles
  3. mostrar la página web lenta
  4. actualizar la tabla de datos y ordenarla por "duración", de mayor a menor

Si un módulo es mucho más lento que los demás, probablemente sea el culpable, en este caso la solución es contactar con el desarrollador y pedirle que optimice la velocidad de carga de éste. Si ve varios módulos lentos, es posible que el problema esté relacionado con la potencia del servidor Apache o del servidor de bases de datos (MySQL o MariaDb).

Compruebe la potencia de su alojamiento

Si del perfilado no surge ninguna sospecha o pista y la lentitud es generalizada, es posible que su servidor no esté configurado correctamente o que no sea lo suficientemente potente.

Versión PHP

Empiece por comprobar si la versión de PHP es correcta. Mira esta tabla para saber qué versión de PHP debes tener al menos dependiendo de la versión de Prestashop:

Versión PHP
Versión de PrestaShop ≤ 5.1 5.2 5.3 5.4 5.5 5.6 7.0 7.1 7.2 7.3 7.4 ≥ 8.0
1.6.1.x No Versión recomendada No No No No
1.7.0 ~ 1.7.3 No No No Versión recomendada No No No No
1.7.4 No No No No No Versión recomendada No No No No
1.7.5 ~ 1.7.6 No No No No No Versión recomendada No No No
1.7.7 No No No No No No No Versión recomendada No No
1.7.8 No No No No No No No Versión recomendada No

Leyenda: = Versión recomendada, = Compatible, No = No compatible

Ajustes y extensiones de PHP

También puede utilizar este script PHP para comprobar si su servidor Apache está correctamente configurado para Prestashop. Comprobará la configuración y las extensiones esenciales para el CMS:

Pré-requis techniques pour Prestashop

Conclusión

Si después de todas estas pruebas y correcciones su TTFB sigue siendo muy largo, más de 1 segundo, debería considerar tomar un paquete de alojamiento más potente o instalar nuestro módulo de caché HTML Page Cache Ultimate .

En cualquier caso, te deseo mucha suerte y espero que resuelvas rápidamente tus problemas de rendimiento con Prestashop