Fiche incident

Site lent sur PrestaShop - Causes & solutions

Rédigé par Soulaimane Aattar — 850+ interventions e-commerce documentées Mis à jour le 14 juin 2026 Versions concernées : PrestaShop 1.7.x, 8.x et 9.x (Symfony 6.4, PHP 7.4 à 8.4)

Une boutique PrestaShop qui rame ne perd pas seulement des secondes de chargement : elle perd des commandes. Au-delà de 3 secondes de chargement mobile, plus de la moitié des visiteurs quittent avant même de voir la fiche produit, et chaque dixième de seconde de TTFB en plus se paie en abandon panier et en coût d'acquisition gonflé. La lenteur est un problème de revenu déguisé en problème technique.

La difficulté, c'est que la lenteur PrestaShop est presque toujours multi-cause : cache mal configuré, modules front qui injectent 30+ assets, table ps_specific_price obèse, hébergement mutualisé sans OPcache. Tirer au hasard (changer d'hébergeur, désinstaller des modules en masse) fait perdre du temps et casse parfois la boutique. Ce guide suit l'ordre inverse : on mesure d'abord, on identifie le ou les vrais coupables, puis on corrige les 3 à 5 leviers qui produisent 80 % du gain.

On distingue d'emblée trois symptômes qui n'ont pas le même diagnostic : front lent (visiteurs), back-office lent (vous), et lenteurs intermittentes (par à-coups). Le chemin de résolution n'est pas le même selon le cas — on commence donc par trier.

Contexte technique

La lenteur PrestaShop est rarement mono-cause. Le profil typique observé : cache Smarty désactivé ou forcé à chaque requête, modules front injectant 30+ assets JS/CSS non critiques, table ps_specific_price gonflée (souvent plusieurs centaines de milliers de lignes inutiles), et hébergement mutualisé sans opcode cache. Sur une boutique de 2 000 références, un TTFB au-dessus de 1,2 seconde indique généralement une requête SQL catalogue non indexée ou un hook produit qui fait des appels bloquants en base.

prestashop lentoptimiser prestashop vitesseprestashop performance

Cet incident peut impacter votre chiffre d’affaires.

Si ce problème touche le checkout, la disponibilité ou la performance, la perte de revenu peut être immédiate.

Note expert BugRescue

Un audit PrestaShop correctement mené identifie les 3 à 5 leviers qui produisent 80% du gain. L'erreur classique : vouloir tout optimiser d'un coup. Priorisez d'abord les pages business (catégorie, fiche produit, checkout) avant l'accueil.

Prise en charge par des experts avec 15+ ans d’expérience e-commerce.

Équipe senior full-stack PrestaShop, WooCommerce, Magento, Shopify et WordPress. Intervention rapide sur incidents critiques et stabilisation durable — France, Maroc, Belgique et Suisse.

Symptômes : comment confirmer le diagnostic

Avant toute intervention, qualifie précisément où ça rame. Un TTFB front élevé, un back-office qui traîne et des pics aléatoires ne pointent jamais vers les mêmes causes — confondre les trois est la première erreur.

Utilise cet arbre de triage pour orienter le reste du diagnostic. C'est lui qui détermine quelles commandes lancer ensuite.

  • Front lent en permanence (pages produits, catégories, accueil) → cache désactivé, assets non concaténés, requêtes catalogue non indexées, images lourdes. Va voir le profiler et la CCC.
  • Back-office lent uniquement → statistiques natives actives, modules branchés aux hooks admin, table ps_log / ps_connections gonflée. Le front peut être correct.
  • Lenteurs intermittentes / aléatoires → cron simultanés, cache qui se régénère, pic de trafic ou bots/scraping, hébergement mutualisé saturé par un voisin. Regarde les logs Apache/Nginx et le slow query log.
  • TTFB > 1 s mesuré sur GTmetrix ou DevTools = problème serveur/applicatif confirmé (cible : < 600 ms).
  • Le 1er chargement après une purge de cache est toujours plus lent (régénération) ; ne juge jamais une perf sur la première requête, recharge et mesure la seconde.
Mesurer le TTFB réel en ligne de commande (à répéter 3 fois)
curl -o /dev/null -s -w 'TTFB: %{time_starttransfer}s | Total: %{time_total}s\n' https://votre-boutique.com/
curl -o /dev/null -s -w 'TTFB: %{time_starttransfer}s | Total: %{time_total}s\n' 'https://votre-boutique.com/2-accueil'

Impact business immédiat

La lenteur n'est pas un confort dégradé, c'est une fuite de chiffre d'affaires mesurable. Voici ce qui se dégrade pendant que le site rame, par ordre de gravité pour un marchand.

  • Baisse du taux de conversion : l'abandon grimpe dès que le LCP dépasse 2,5 s sur mobile, là où se fait l'essentiel du trafic.
  • Coût publicitaire par commande en hausse : un site lent dilapide le budget Google Ads / Meta — tu paies le clic mais la page perd le visiteur avant l'ajout panier.
  • Perte de visibilité SEO : les Core Web Vitals (LCP, CLS, INP) sont un signal de classement ; un site lent recule sur les requêtes catalogue compétitives.
  • Frustration et rebond : un back-office lent ralentit aussi ton équipe (saisie commandes, SAV) et coûte en productivité interne.

Causes classées par probabilité

Sur la base des audits PrestaShop, voici les causes triées de la plus fréquente à la plus rare. Inutile de partir sur l'hébergement (cause souvent surévaluée) tant que les quatre premières n'ont pas été écartées.

  • 1. Cache mal configuré (très fréquent) — Smarty forcé à recompiler à chaque requête, CCC désactivée, aucun OPcache. Le cache corrompu après mise à jour représente à lui seul une grosse part des incidents.
  • 2. Modules front trop nombreux ou mal codés — chaque module greffé sur displayHeader / displayFooter injecte ses JS/CSS et parfois une requête SQL bloquante. 30+ assets non critiques sur une fiche produit est courant.
  • 3. Base de données obèse / non indexée — tables ps_log, ps_connections, ps_guest, ps_statssearch, ps_cart, ps_specific_price (souvent des centaines de milliers de lignes inutiles) ; requête catalogue sans index.
  • 4. Images non optimisées — pas de WebP, pas de lazy load, vignettes non régénérées, fichiers de plusieurs Mo servis tels quels.
  • 5. Version PHP ancienne — rester en 7.4 alors que PHP 8.x est jusqu'à 3× plus rapide ; absence d'OPcache.
  • 6. Hébergement sous-dimensionné (souvent invoqué, rarement le vrai problème en premier) — mutualisé sans RAM dédiée, pas de Redis/Varnish, InnoDB sous-alloué.

Diagnostic : les commandes à lancer

L'objectif ici est de transformer « le site est lent » en « le hook X du module Y consomme 800 ms en base ». On active le profiler, on lit les logs, on traque les requêtes SQL lentes.

Étape 1 — Activer le profiler PrestaShop de façon sécurisée (jamais ouvert à tous en production, le mode profiling ajoute 30 à 50 % de surcoût). Édite config/defines.inc.php et restreins-le à ton IP :

Étape 2 — Recharge une fiche produit, puis ouvre la page : le profiler affiche le temps total, le nombre de requêtes SQL (50–150 par page est normal, > 200 est une alerte), le temps SQL (s'il dépasse 50 % du temps total, le problème est en base) et le détail hook par hook. Les hooks coupables récurrents côté admin : actionAdminControllerSetMedia, displayBackOfficeHeader, actionDispatcher.

Étape 3 — Traquer les requêtes SQL lentes côté MySQL (seuil 1 s, une requête > 100 ms est déjà lente) et identifier les tables obèses.

  • Distinction importante : le mode debug (_PS_MODE_DEV_) affiche les erreurs PHP ; le profiling (_PS_DEBUG_PROFILING_) mesure les temps. Active le profiling seul pour mesurer, et coupe les deux en prod normale.
  • En PrestaShop 8.x/9.x, le mode dev passe aussi par le fichier .env (APP_ENV=dev, APP_DEBUG=1) — repasse en prod avant d'ouvrir au public.
Activer le profiler restreint à ton IP — config/defines.inc.php
// Restreint le profiling à ta seule IP publique
if ($_SERVER['REMOTE_ADDR'] === 'VOTRE_IP_PUBLIQUE') {
    define('_PS_DEBUG_PROFILING_', true);
}
// Laisser le mode dev à false en production
define('_PS_MODE_DEV_', false);
Lire les logs serveur et repérer les pics / scraping
# Erreurs et lenteurs applicatives récentes
tail -n 100 var/logs/prod.log        # PrestaShop 8.x / 9.x
tail -n 100 app/logs/prod.log        # PrestaShop 1.7

# Top 20 des IP qui frappent le serveur (détecter un bot/scraping)
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -rn | head -20
Identifier les requêtes lentes et les tables obèses — MySQL
-- Activer le slow query log (seuil 1 s)
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;

-- Tables les plus volumineuses du schéma PrestaShop
SELECT table_name,
       ROUND((data_length + index_length) / 1024 / 1024, 1) AS size_mb,
       table_rows
FROM information_schema.tables
WHERE table_schema = DATABASE()
ORDER BY (data_length + index_length) DESC
LIMIT 15;

Solutions pas-à-pas

Applique dans cet ordre. Mesure le TTFB avant et après chaque action (commande curl de la première section) pour valider le gain — c'est ce qui distingue une optimisation d'un coup de dés.

  1. Vider et reconfigurer le cache. Back-office : Paramètres avancés > Performances > Vider le cache. En CLI (voie moderne PS 8.x/9.x) : php bin/console cache:clear --env=prod. Manuel/FTP : vide /var/cache/ (PS 8.x/9.x) ou /cache/ (PS 1.7). Recharge deux fois avant de juger.
  2. Régler le cache dans Paramètres avancés > Performances : « Ne jamais recompiler les fichiers de templates » en prod, cache « Système de fichier » (ou CacheApc si l'extension apcu est installée — sinon le message « vous devez installer l'extension APC PCEL » apparaît). Garde « Vider le cache à chaque modification » pour le catalogue.
  3. Activer la CCC (Smart Cache) : concaténer + compresser CSS et JavaScript. ATTENTION : combiner le JS casse certains thèmes/modules. Active-la, navigue sur fiche produit, catégorie, panier et checkout ; si un slider ou un onglet ne répond plus, désactive le « combiner JS » seul en gardant la compression.
  4. Désactiver les statistiques natives (gros gain back-office) : Modules > Gestionnaire de modules, désactive Visits and Visitors, Pages not found, Search engine keywords, Visitors Online, Best Categories/Customers/Suppliers/Selling Products, Data mining for statistics, Stats Dashboard.
  5. Purger et optimiser la base. Sauvegarde d'abord, puis nettoie les tables d'historique et lance OPTIMIZE TABLE (voir code).
  6. Passer à PHP 8.3/8.4 et activer OPcache (256 Mo mini). Règle memory_limit à 512M, max_execution_time à 300, realpath_cache_size à 4096K et realpath_cache_ttl à 600. Si tu as la main serveur, fixe l'InnoDB buffer pool à 60–70 % de la RAM.
  7. Optimiser les images : régénère les vignettes (Design > Images > Régénérer), active le lazy load et sers en WebP. Compresse les visuels existants (TinyPNG ou conversion serveur).
  8. Activer la compression Brotli (meilleure que Gzip, standard 2026) côté Nginx/Apache, et HTTP/2 ou HTTP/3. En option avancée : CDN (Cloudflare/BunnyCDN) et cache serveur Redis/Varnish une fois les bases faites.
Purger l'historique et optimiser les tables — MySQL (sauvegarde d'abord)
-- Vider les tables d'historique qui gonflent inutilement
TRUNCATE TABLE ps_log;
TRUNCATE TABLE ps_connections;
TRUNCATE TABLE ps_connections_source;
TRUNCATE TABLE ps_guest;
TRUNCATE TABLE ps_statssearch;

-- Paniers abandonnés très anciens (adapter la date)
DELETE FROM ps_cart WHERE date_add < DATE_SUB(NOW(), INTERVAL 6 MONTH);

-- Défragmenter / recalculer les index
OPTIMIZE TABLE ps_cart, ps_specific_price, ps_search_index, ps_log, ps_guest;
Vider le cache en CLI — PrestaShop 8.x / 9.x
php bin/console cache:clear --env=prod
# puis régénérer en frappant deux fois une page front
curl -o /dev/null -s https://votre-boutique.com/ && \
curl -o /dev/null -s -w 'TTFB après purge: %{time_starttransfer}s\n' https://votre-boutique.com/

Spécificités par version

Les chemins, la voie CLI et les versions PHP recommandées diffèrent nettement selon la branche. Vérifie ta version dans Configuration avant d'appliquer une commande.

  • PrestaShop 1.7.x : cache dans /cache/, logs dans app/logs/, PHP 7.4+ recommandé (7.4 minimum sur 1.7.8). Pas de bin/console fiable partout — privilégie back-office et FTP.
  • PrestaShop 8.x : cache dans /var/cache/, logs dans var/logs/prod.log, mode dev via .env, PHP 8.1/8.2/8.3. bin/console cache:clear disponible.
  • PrestaShop 9.x : socle Symfony 6.4, PHP 8.1 minimum et compatible 8.3/8.4 (PHP 8.x est jusqu'à 3× plus rapide que 7.4). C'est la branche qui tire le meilleur des optimisations OPcache et du moteur récent.
  • Sur serveur dédié/VPS, neutraliser l'appel distant aux Addons (qui ajoute une latence réseau) via un override : override/classes/Tools.php, surcharge addonsRequest() pour retourner false. Ne touche jamais au cœur, passe toujours par /override.
  • Core Web Vitals à viser (valeurs 2026) : LCP < 2,5 s, CLS < 0,1, INP < 200 ms (l'INP a remplacé le FID — ne te fie pas aux vieux guides qui citent encore « FID < 100 ms »), FCP < 1,8 s, score PageSpeed mobile > 70.

Quand appeler un expert

La majorité des gains (cache, CCC, purge BDD, PHP 8.3) se font en interne avec ce guide. Fais appel à un expert quand le diagnostic dépasse l'auto-dépannage ou quand le risque business est trop élevé pour expérimenter en production.

BugRescue, l'expertise de Soulaimane Aattar (fondateur), intervient sur ces cas : lecture fine du profiler hook par hook, optimisation SQL (index manquants, requêtes catalogue lourdes), mise en place Redis/Varnish, et arbitrage migration vs optimisation pour récupérer un maximum de performance sans refonte lourde.

  • Le profiling pointe un hook ou une requête SQL que tu n'arrives pas à isoler, ou le temps SQL dépasse 50 % sans coupable évident.
  • Lenteurs intermittentes inexpliquées malgré logs propres (suspicion de saturation hébergement, cron mal réglés ou scraping).
  • La CCC ou un changement de version casse le thème et tu ne peux pas te permettre une boutique instable.
  • Tu hésites entre migrer (hébergement, PS 9) et optimiser : un audit ciblé tranche en quelques heures et évite une migration coûteuse inutile.

FAQ

Pourquoi mon site PrestaShop est-il lent ?

Presque jamais une seule cause. Dans l'ordre de fréquence : cache mal configuré (Smarty/CCC/OPcache), modules front qui injectent trop d'assets, base de données obèse ou non indexée, images non optimisées, PHP ancien, et enfin l'hébergement. Active le profiler pour identifier le ou les vrais coupables avant d'agir.

Comment vider le cache PrestaShop ?

Trois voies. Back-office : Paramètres avancés > Performances > Vider le cache. CLI moderne (PS 8.x/9.x) : php bin/console cache:clear --env=prod. Manuel/FTP : vider /var/cache/ (PS 8.x/9.x) ou /cache/ (PS 1.7). Le premier chargement après purge est toujours plus lent (régénération) : recharge deux fois avant de juger la perf.

Le mode debug ralentit-il vraiment le back-office ?

Oui. Le mode profiling/debug ajoute 30 à 50 % de surcoût car PrestaShop instrumente chaque requête. Active-le seulement pour mesurer, restreins-le à ton IP, et repasse en mode prod (_PS_MODE_DEV_ = false, APP_ENV=prod) dès le diagnostic terminé.

Faut-il changer d'hébergeur pour résoudre un site lent ?

Rarement en premier. L'hébergement est la cause la plus surévaluée. Tant que le cache, la CCC, la purge BDD et PHP 8.3+ n'ont pas été traités, changer de serveur masque le problème sans le régler. Si après ces optimisations le TTFB reste > 1 s sur du mutualisé, alors un VPS (4 Go RAM mini, Redis/Varnish) est justifié.

Quelle version de PHP pour PrestaShop ?

PHP 8.3 ou 8.4 sur PrestaShop 9 (Symfony 6.4), 8.1 à 8.3 sur PrestaShop 8.x, 7.4 minimum sur 1.7.8. PHP 8.x est jusqu'à 3× plus rapide que 7.4 : passer de 7.4 à 8.3 avec OPcache (256 Mo) est souvent le gain le plus rentable pour un effort minimal.

La CCC (concaténation/compression) peut-elle casser le site ?

Oui, surtout l'option « combiner JS » qui casse certains thèmes ou modules (sliders, onglets, scripts dépendants de l'ordre de chargement). Active la CCC puis teste fiche produit, catégorie, panier et checkout. En cas de casse, désactive uniquement le combiner JS en gardant la compression CSS/JS.

Appeler WhatsApp