blog
Optimiser son hébergement Prestashop

Prestashop est l’un des CMS E-Commerce les plus en vogue en ce moment. Plus léger et accessible qu’un Magento 2 ou qu’un Sylius, il permet de piloter une boutique en ligne facilement et efficacement avec un temps de développement maitrisé.

Son impressionnant catalogue de modules lui confère également une forte modularité et il peut s’adapter à l’ensemble du contexte de l’E-Commerçant (transporteur, paiement, ERP, gestion de stock, etc).

Enfin, le nombre d’agences Web de qualité spécialisées en Prestashop et capable d’apporter une intégration et des développement sur-mesure est significatif en France. Néanmoins, malgré toutes ses qualités, Prestashop souffre généralement de problématiques de performances liées à son design, à ses modules et à la façon dont il est intégré.

Au programme :

Dans cet article, nous allons passer en revue l’ensemble des couches d’hébergement permettant de faire baisser significativement le temps de réponse des pages Prestashop de votre boutique. Alors, attachez vos ceintures, on vous emmène dans les coulisses de l’hébergement et nous révélons tous nos secrets pour réduire facilement et efficacement vos temps de réponse !

Lors de nos tests, nous regardons principalement le TTFB (Time To First Byte) qui décrit le temps pris par un serveur pour renvoyer le premier octet suite à une requête.

Le TTFB fait partie des nombreux paramètres impactant la performance et ce n’est bien entendu par le seul. Par contre, c’est celui qui nous intéresse ici en tant qu’hébergeur, car nous avons la possibilité de fortement l’améliorer sans la moindre intervention du client !

État des lieux

Pour faire un état des lieux objectif, nous avons déployé un Prestashop dans sa dernière version stable (1.7.8.0 au moment de cet article) sur un serveur CentOS 7 disposant des versions logicielles suivantes :

Apache 2.4
> PHP 7.1
> MYSQL 5.7

Le profil du serveur hébergeant l’application est le suivant :

Serveur Privé Nexylan
4 vCPUs (AMD Epyc)
8 Go de RAM
100 Go de disque (Flash)

Nous avons déployé un Prestashop basique dans lequel nous avons importé les données de test afin d’avoir des mesures sollicitant l’ensemble des ressources (médias, SQL, etc).

 

Performances initiales

De base, sans aucune optimisation, on observe un temps de réponse de 300ms sur la page d’accueil. Ce temps est plutôt raisonnable, dans la fourchette basse des performances moyennes observées sur le marché. Ceci s’explique par l’absence de module dans notre configuration.

Mais nos équipes ont voulu se lancer le défi de faire mieux !

Nous avons lancé un test de montée en charge sur ce site et avons atteint environ 180 utilisateurs simultanés (21k requêtes par minute) avant de voir un décrochage des temps de chargement en raison de la saturation du CPU côté serveur :

Optimisation du système

Ecran avec Code PHP

Après ce premier test de performance honorable, nous allons détailler, étape par étape, l’impact que peut avoir chaque élément d’hébergement sur le temps de réponse (TTFB).

Etape 1 : Version de PHP

Dans notre exemple, nous avons comparé le temps de chargement de notre site en PHP 7.1 puis en PHP 8.1. Nous n’avons pas observé de différence significative entre ces 2 versions (pourtant éloignées).

 

En revanche, dans notre quotidien d’hébergeur, nous avons observé de fortes variation de performance sur Prestashop lors du passage de PHP 5.6 à PHP 7.x. Si votre environnement, le permet, nous recommandons fortement cette mise à jour ! Les gains observés sont de l’ordre de 50% de notre côté (non reproductible ici car Prestashop 1.7.8 n’est plus compatible PHP 5.6).

Etape 2 : Configuration de OpCache

Dans notre configuration d’origine, l’OpCache est désactivé dans notre configuration PHP.

L’activation de celui-ci apporte un gain significatif de performance : on passe à 150ms de TTFB soit une réduction de 50% rien qu’avec ce module :

				
					opcache.enable=1
				
			

Mieux encore, en jouant avec les paramètres de taille de mémoire OpCache, de nombre de fichiers, de mémoire chaîne interne et d’existence de fichiers, on tombe à 100/120ms. Encore 20% de gagnés !

Prenez note que le premier chargement après un redémarrage de PHP aura des performances inférieures.

Etape 3 : Configuration de open_basedir

Pour aller encore plus loin, l’activation ou désactivation du module open_basedir semble avoir un impact important sur la performance de Prestashop.

En effet, la désactivation de l’option dans notre environnement de test nous permet de passer sous la barre des 100ms lors du chargement de la page d’accueil de notre démo.

Attention toutefois avant de désactiver cette configuration, assurez-vous bien de ne pas impacter le niveau de sécurité de votre environnement.

Etape 4 : Configuration de MySQL

La configuration de MySQL peut être déterminante pour la performance d’une application.

Effectivement, telle qu’elle est réalisée de base sur un serveur, elle n’exploite pratiquement aucune des fonctionnalités de cache de MySQL.

En appliquant quelques optimisations simples, nous avons encore réduit de 50% le temps de réponse de notre Prestashop 1.7 pour atteindre désormais une moyenne de 50ms !

				
					query_cache_limit                     = 128K
query_cache_size                      = 32M
query_cache_type                      = ON

table_open_cache                      = 1000
read_buffer_size                      = 2M
read_rnd_buffer_size                  = 1M
thread_cache_size                     = 80
join_buffer_size                      = 2M
sort_buffer_size                      = 2M
max_connections                       = 400
tmp_table_size                        = 32M
max_heap_table_size                   = 32M
table_definition_cache                = 1000
performance_schema                    = OFF
				
			

Cette configuration nécessite toutefois d’être adaptée par un expert à votre environnement. Certaines configurations peuvent être contre-productives dans certains cas.

La configuration fine de MySQL ne s’arrête pas là et de nombreux paramètres peuvent encore être ajustés.

Configuration avancée

D’autres pistes d’optimisation sont possibles pour aller encore plus loin selon les environnements et leur utilisation : > Mise en TMPFS (mémoire) du répertoire de cache Prestashop > Déploiement d’un module Varnish (pour les sites à très fort trafic ou dont les performances ne peuvent pas être améliorées par nos conseils précédents) > Dans certains cas, la performance du serveur elle-même n’est pas adaptée (disque lents, CPU insuffisant, mémoire faible) et la migration vers une plateforme plus performante est requise > Un audit de performance peut également être nécessaire afin de valider les optimisations possibles et leur impact.

Conclusion

Comme vous avez pu le voir dans notre démonstration, le temps de chargement d’un projet Web peut varier considérablement en fonction de la configuration du système.

Dans notre exemple, nous avons divisé par 6 (!) le temps de réponse de base d’un Prestashop 1.7 pour passer de 300ms à 50ms !

Comparatif performance Prestashop

Vous pouvez tester notre maquette par vous-même ici : https://prestashop.nexylan.net/

Envie d’aller plus loin ?

Nexylan met à votre disposition ses experts de l’hébergement et de l’infogérance E-Commerce pour améliorer les performances de votre site.

Nous sommes en mesure d’auditer votre infrastructure existante et vous proposer des améliorations concrètes et efficaces.

N’hésitez pas à nous contacter !