Ouvrez votre boutique en navigation privée et comptez. Si la première page met du temps à s’afficher, ce n’est pas votre connexion : c’est PrestaShop qui la construit de zéro. Sur une boutique avec un hébergement mutualisé, un grand catalogue et quelques dizaines de modules, attendre environ 5 secondes que le serveur livre une page n’a rien d’exceptionnel. Avec un cache de pages bien conçu, cette même page peut arriver en environ une demi-seconde.
Le hic, c’est que mettre PrestaShop en cache est délicat. Fait à la va-vite, le remède est pire que le mal : des clients qui voient le panier d’un autre, des prix périmés, des promotions qui ne démarrent pas. Cet article explique pourquoi, ce que vous gagnez quand c’est bien fait et ce qu’un cache doit respecter pour que vous puissiez l’activer l’esprit tranquille.
L’attente avant que la page n’arrive
Exemple d’une boutique lente, même page et même serveur
10 fois moins d’attented’environ 5 s à environ 0,5 s
Exemple illustratif. Le résultat réel dépend de l’hébergement, des modules et du thème : plus la boutique est lente, plus l’écart est grand.
Ce que fait PrestaShop à chaque visite
Chaque fois que quelqu’un ouvre une page, PrestaShop démarre, détermine la langue, la devise et le pays, charge le contrôleur, exécute tous les hooks de la page (chaque module installé peut y ajouter sa part), lance des dizaines voire des centaines de requêtes sur le catalogue, calcule les prix avec taxes et remises, puis assemble le tout avec les gabarits Smarty du thème. Pour la plupart des visiteurs, tout cela produit exactement la même page que celle que le visiteur précédent vient de recevoir.
Le chemin d’une page
Ce qu’un nouveau visiteur s’épargne quand la page est déjà prête
- Requête
- →
- Démarrage de PrestaShop
- →
- Contrôleur
- →
- Hooks de tous les modules
- →
- Requêtes sur le catalogue
- →
- Prix et taxes
- →
- Gabarits Smarty
- →
- Page
- Requête
- →
- Démarrage de PrestaShop
- →
- Page déjà prête
Les options de Paramètres avancés › Performances (cache Smarty, CCC, compilation des gabarits) accélèrent chaque étape, mais ne les évitent pas. PrestaShop n’a pas de cache de pages complètes intégré : c’est pourquoi tant de boutiques se tournent vers des modules ou le cache de leur hébergeur, et pourquoi tant finissent par le désactiver.
Chaque seconde compte pour la conversion
La vitesse n’est pas un détail technique : c’est du chiffre d’affaires. Une analyse de Portent publiée en 2022 sur des boutiques en ligne montre que les pages chargées en 1 seconde convertissent bien mieux que celles qui mettent quelques secondes de plus.
Taux de conversion des boutiques en ligne selon le temps de chargement
À 3 secondes, on vend déjà moins de la moitié qu’à 1 seconde
Source : Portent, « Site Speed is (Still) Impacting Your Conversion Rate » (2022), boutiques B2C de son échantillon.
Et pas besoin de gagner des secondes entières pour le sentir :
Ce que disent les études
De plus, le temps de réponse du serveur fait partie de ce que mesurent Core Web Vitals et PageSpeed Insights : une boutique qui répond plus vite part avec un avantage.
Pourquoi mettre PrestaShop en cache est si délicat
Un cache enregistre une page et la donne au visiteur suivant. Simple, jusqu’à ce qu’on se rappelle tout ce qui, dans PrestaShop, change d’un visiteur à l’autre ou d’un moment à l’autre :
- Le panier et le compte. L’en-tête affiche le nombre d’articles du panier et le nom du client. Si la page d’un client connecté est enregistrée, le visiteur suivant voit « Bonjour Marta » et son panier.
- Les prix par client. Les groupes de clients, les prix B2B et les remises par client changent ce qu’affiche la fiche produit.
- Devise, pays et taxes. PrestaShop peut choisir la devise et le pays selon le navigateur ou l’adresse IP, et les taxes avec. Une seule page pour tous, ce sont des prix faux pour quelqu’un.
- Les prix datés. Prix spécifiques, règles de prix catalogue et ventes flash commencent et finissent à une heure précise. Une page enregistrée à 23 h 59 affiche encore l’ancien prix à 0 h 01 si rien ne la renouvelle.
- Le stock et les changements du catalogue. Un produit épuisé, une nouvelle photo ou un prix corrigé doivent apparaître sur la fiche, dans sa catégorie et dans toutes les listes où il figure.
- Les modules. Chaque module peut afficher quelque chose de différent pour chaque visiteur : produits consultés, jetons de formulaires, messages personnalisés. Certains écrivent aussi des réglages à chaque visite, ce qui trompe les caches qui se vident au moindre changement.
C’est pourquoi les caches activés « à la hache » (celui de certains hébergeurs, un Varnish non configuré, des modules qui enregistrent tout) finissent par causer les mêmes frayeurs : le panier d’un autre, des prix qui ne correspondent pas à la commande, la promotion qui ne démarre pas, une page d’erreur enregistrée. Et la boutique redevient lente parce que quelqu’un désactive le cache « par précaution ».
Ce qu’un cache sûr doit respecter
Avant d’activer un cache de pages sur PrestaShop, vérifiez qu’il :
- Ne sert les pages enregistrées qu’aux visiteurs qui n’ont rien à eux : non connectés, panier vide. Tous les autres reçoivent toujours la page en direct.
- N’enregistre que des pages construites pour des visiteurs « vierges », sans panier, compte ni historique, pour que rien de personnel ne s’y glisse.
- Ne touche jamais au panier, à la commande, au compte ni à la recherche.
- Sépare les pages par devise, pays, appareil et boutique, pour que prix et taxes soient toujours justes.
- Renouvelle les pages d’un produit dès que son prix ou son stock change, sans vider tout le reste.
- Expire pile au moment où un prix programmé ou une vente flash commence ou se termine.
- Est invalidé dès que vous enregistrez un réglage dans le back-office, mais pas par la comptabilité interne des modules.
- N’enregistre jamais d’erreurs, de redirections ni de pages incomplètes.
Ce que font les autres modules de cache
Sur PrestaShop, on trouve trois grandes familles de solutions, et il est utile de savoir ce que chacune apporte :
| Approche | Exemples | Gestion du panier et du compte | Ce qu’il faut | À garder en tête |
|---|---|---|---|---|
| Module de cache de pages qui recharge des blocs en ajax | Page Cache Ultimate (JPresta) et similaires | Sert la page enregistrée à tous, clients connectés compris, puis récupère en ajax les blocs personnels (panier, nom, produits consultés) | Indiquer quels modules sont « dynamiques » | Accélère aussi les clients connectés ; il faut vérifier quels modules sont personnels (JPresta propose une configuration automatique) et, tant que l’appel ajax n’a pas répondu, ces blocs affichent leur valeur par défaut (un panier à 0, par exemple) |
| Cache côté serveur | Varnish, LiteSpeed Cache pour PrestaShop | Blocs privés par utilisateur via ESI ou des règles dédiées | Un serveur compatible (LiteSpeed Web Server, Varnish) et l’accès pour le configurer | Le plus rapide, car PHP ne démarre même pas ; rarement disponible en hébergement mutualisé, et des règles Varnish écrites à la main sans les bonnes exclusions peuvent montrer le panier d’un autre |
| Optimiseurs | Modules de minification, de combinaison CSS/JS ou de chargement différé | N’enregistrent pas la page | Rien de particulier | Ils aident le navigateur, mais PrestaShop construit toujours chaque page de zéro |
Toutes sont des options valables, chacune avec son prix en configuration, en infrastructure ou en risque.
Ce qui distingue Page Cache
Page Cache est notre module de cache de pages complètes pour PrestaShop 8.2 et 9.0. Il prend un autre chemin : il n’enregistre jamais rien de personnel, et rend à chaque visiteur ses parties personnelles séparément.
- Sûr sans rien configurer. Les pages ne sont enregistrées que pour des visiteurs « vierges » : même si un module de votre boutique affiche quelque chose de personnel, cela n’atteint jamais le cache. Par défaut, toute personne connectée ou avec un article dans son panier reçoit la page en direct.
- Des clients plus rapides, si vous le voulez. Avec les fragments dynamiques activés, les clients connectés et les visiteurs avec un panier reçoivent aussi la page du cache, et leur panier, leur nom et leurs liens de compte apparaissent un instant plus tard. Les jetons de formulaire sont placés dans la page avant son envoi : « Ajouter au panier » fonctionne dès le premier clic. Les clients aux prix propres ou d’autres groupes reçoivent toujours la page en direct.
- Pensé pour les développeurs. Si un autre module affiche quelque chose de personnel, un formulaire dont chaque champ est expliqué permet d’indiquer de quel élément il s’agit et d’où vient son contenu à jour : un hook de module, un événement PrestaShop ou une page de la boutique.
- Une vérification avant l’activation. Il ouvre vos pages comme deux nouveaux visiteurs et vous montre toute différence entre elles, pour savoir si votre boutique est prête avant d’activer quoi que ce soit.
- Des prix toujours à jour. Il renouvelle aussitôt les pages d’un produit quand son prix, son stock, ses déclinaisons ou ses images changent ; les pages expirent pile quand un prix spécifique, une règle de prix catalogue ou un message de Promo Bar commence ou se termine ; et tout réglage enregistré dans le back-office invalide l’ensemble. Les réglages que les modules écrivent d’eux-mêmes à chaque visite ne comptent pas : il les repère et les ignore.
- Rapide dès le premier visiteur. Un préchauffage (un bouton ou une tâche cron) prépare l’accueil, les catégories et les meilleures ventes avant l’arrivée de quiconque, et les filtres de la recherche à facettes sont eux aussi servis depuis le cache.
- Fonctionne sur tout hébergement. Aucun override, aucune modification du
.htaccessni du serveur, aucune extension PHP. Il s’installe désactivé et se désinstalle sans laisser de trace. - Transparent. Le back-office indique combien de pages sont servies depuis le cache, le temps de réponse avec et sans cache et l’attente épargnée, et chaque réponse porte l’en-tête
X-Ecom-Cache(HIT,MISSouBYPASSavec la raison).
Et ce qu’il ne fait pas, pour décider en connaissance de cause : comme il répond depuis PrestaShop (sans serveur particulier), une page servie depuis le cache passe tout de même par le démarrage de PHP, et les fiches produit pour les clients connectés restent désactivées tant que la vérification n’a pas confirmé qu’aucun module n’y affiche quelque chose de personnel non couvert. Si vous visez le maximum absolu avec des millions de visites, un cache serveur bien configuré peut mieux vous convenir. Pour la plupart des boutiques, où presque tout le trafic nouveau arrive sans session depuis Google, la publicité et les newsletters, Page Cache accélère justement ces visites, sans aucun risque.
Envie de tout voir au même endroit ? Accélérer PrestaShop réunit le cache de pages, les filtres, la recherche et le tunnel de commande, avec nos mesures et par où commencer.
Sources
- Portent, Site Speed is (Still) Impacting Your Conversion Rate (2022).
- Deloitte Digital et Google, Milliseconds Make Millions (2020).
- Think with Google, statistiques sur le temps de chargement.
- JPresta, Page Cache Ultimate (description du module).
- LiteSpeed Technologies, LiteSpeed Cache pour PrestaShop.