27/07/2020

Optimización PHP en PrestaShop 1.7 ¡aumenta el rendimiento de tu eCommerce!

¿Sabes cómo optimizar el PHP de tu tienda PrestaShop de manera profesional?

A continuación vamos a ver algunos cambios que podemos aplicar en la configuración PHP de nuestros eCommerce, para optimizar PrestaShop y aumentar el rendimiento del sistema.

Por ello, y sin más dilación, comencemos por las consideraciones preliminares:

¿Por qué es importante optimizar el PHP en tu tienda PrestaShop?

Según un estudio, se calcula que si Amazon.com tarda en cargar un segundo más de lo normal, le podría costar 1.600 millones en ventas cada año a la empresa.

Esto es un ejemplo muy claro de la importancia de la velocidad de carga de nuestro sitio web, no solo porque es un factor a tener en cuenta para el posicionamiento natural de nuestra tienda online (SEO) si no por las ventas que podemos perder por una carga lenta de nuestra tienda PrestaShop.

Optimizar PHP debe ser el primer paso a optimizar, como hemos visto, optimizamos todos los procesos básicos con los que trabaja PrestaShop para hacer funcionar la tienda online, de aquí la gran importancia.

Después no debemos olvidar páginas como Google Page Speed, GTmetrix, Pingdom Tools, etc… que nos devolverán un detalle del tiempo de carga de nuestra web y de las siguientes actuaciones a realizar: normalmente peso de las imágenes, no bloquear la carga de la web con otros Scripts…

Aquí os dejo el webinar que realicé junto con nuestro embajador David Ayala, experto en Marketing Digital donde realizamos una auditoría SEO en vivo.

Al final del vídeo, hacemos un análisis en vivo del tiempo de carga y de su optimización (WPO):

Factores a tener en cuenta para la optimización de PHP

Tenemos que tener conocimientos técnicos, los suficientes para realizar tests de carga y para modificar ficheros de configuración en nuestro servidor.

Las configuraciones que vamos a ver pueden requerir alguna configuración extra dependiendo de tu entorno. 

Hay algunos parámetros que van a requerir reinicio del servidor, así que por favor, ten esto en cuenta a la hora de trabajar en entorno real y no en test.

Podríamos haber ido mucho más lejos en las configuraciones, pero eso hubiera requerido muchos más tests y rara vez estas configuraciones avanzadas están disponibles en la mayoría de Hostings, por ejemplo ajustes en PHP FPM.

Podemos tomar esta guía como el paso inicial, pero por supuesto que hay mucho más que se puede optimizar.

Ajustes necesarios antes de empezar con la optimización PHP en PrestaShop

Antes de realizar cualquier cambio en tu hosting, se recomienda realizar algunos test de rendimiento (benchmark).

La idea de realizar estos test es saber cuál es el rendimiento de la tienda en cada cambio aplicado, de este modo nos podemos asegurar que los cambios están aumentando el rendimiento de la tienda y no al revés.  

Podemos realizar estos test con Google Page Speed, GTMetrix, Lighthouse… o con cualquier herramienta que ya conozcamos y nos devuelva tiempos de carga, estados de caché etc… 

Hay que intentar siempre que sea posible usar PHP >= 7 en esta versión de PHP han trabajado (y muy bien) en labores de optimización, usando esta versión tendrás un buen aumento en la velocidad de la tienda, a continuación podréis ver que versión de PHP usar en función de la versión de PrestaShop que estéis usando. 

Ajustes necesarios antes de empezar con la optimización PHP en PrestaShop

Configuraciones generales de PHP

A continuación, te comparto las instrucciones que deberás poner en práctica para que tu tienda online quede completamente optimizada en lo que a PHP se refiere:

1) Realpath

Cada vez que un fichero es incluido en código, PHP necesita mirarlo y analizarlo, esto que parece poco puede convertirse en algo muy pesado sobre todo si tenemos los ficheros PHP en un NFS. Activando caché RealPath aligeramos esta carga.

Por defecto los valores realpath_cache_size y realpath_cache_ttl son los siguientes:

realpath_cache_size = 16k
realpath_cache_ttl = 120

Estas variables controlan el tamaño de la memoria caché y el tiempo de vida en dicha caché. 

Nosotros hemos modificado estas líneas asignando los siguientes valores:

realpath_cache_size = 4096k
realpath_cache_ttl = 600

2) OPCache

PHP no es un lenguaje compilado lo que quiere decir que cada vez que lo ejecutas el sistema lo compila para su ejecución.

Podemos agilizar este proceso con OPCache.

OPCache compila y guarda el código en la memoria para mejorar el tiempo de ejecución y funciona bastante bien.

Nosotros lo hemos configurado con los siguientes valores:

[opcache]
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=256
opcache.interned_strings_buffer=32
opcache.max_accelerated_files=16229
opcache.max_wasted_percentage=10
opcache.revalidate_freq=10
opcache.fast_shutdown=1
opcache.enable_file_override=0
opcache.max_file_size=0

Hay dos opciones extras pero hay que tener en cuenta que cuando las activemos haremos que OPCache nunca va a actualizar nuestro código a no ser que se lo comuniquemos con funciones internas o reseteando el servidor:

opcache.validate_timestamps=0
opcache.revalidate_path=0

Configuraciones generales de PHP

3) PHP-FPM

Si en nuestro servidor manejamos PHP-FPM (PHP para webs de alto tráfico) debemos revisar la configuración del pool, que normalmente se encuentra en etc/php/7.x/fpm/pool.d/www. conf

Dentro de este fichero lo más importante es ajustar pm.max_children el valor debe ser mayor que el número máximo de usuarios concurrentes que quieras simular.

4) Composer

La clase loader se usa sobre todo mientras se desarrolla un nuevo módulo o funcionalidad porque encuentra clases nuevas o modificadas.

En servidores en producción los ficheros PHP no deberían cambiar, por este motivo podemos optimizar Autoloader de Composer para escanear la aplicación entera una sola vez y construir un “mapa de clases” que es un array (normalmente grande) con todas las localizaciones de las clases.

Este “mapa” se encuentra en: 

vendor/composer/autoload_classmap.php

Ejecuta el siguiente comando para generar este mapa:

composer dump-autoload --optimize --no-dev --classmap-authoritative
  • --optimize realiza un volcado de memoria (dump) de todas las clases compatibles con PSR-0 y PSR-4 que hayan sido usadas en tu aplicación
  • --no-dev excluye todas las clases que solo son necesarias en entornos de desarrollos
  • --classmap-authoritative hace que Composer no escanee todos los ficheros en busca de clases que no esten en este mapa

Es importante resaltar que realizando esto, si instalamos un módulo nuevo en producción, necesitaremos ejecutar este comando nuevamente.

Conclusión

Los resultados que arrojen estos tests varían dependiendo de nuestro hosting y de nuestra tienda.

Por eso es buena idea empezar por optimizar PHP, pues estaremos optimizando los procesos con los que PrestaShop trabaja constantemente.

Por supuesto, como hemos comentado no os olvidéis de ir haciendo tests con cada implementación y de probar la web para asegurar que no da ningún fallo.

Imagen principal By Freepik.

Cada 2 semanas, nuestra newsletter e-commerce

Al enviar este formulario, acepto que PrestaShop S.A utilice los datos que he facilitado para el envío de boletines y ofertas promocionales. Puedes cancelar la suscripción en cualquier momento por medio del enlace que figura en los correos promocionales que recibes. Obtén más información sobre la gestión de tus datos y derechos.