Accélérer un site PrestaShop : guide complet d'optimisation des performances
Découvrez comment optimiser la vitesse de votre boutique PrestaShop : profiling, hooks, index SQL, hébergement et bonnes pratiques pour un site rapide.
En bref : Pour accélérer PrestaShop, commencez par activer le profiling pour identifier les modules et requêtes SQL qui ralentissent le site, dégraissez les hooks inutiles, ajoutez des index SQL sur les tables critiques, optimisez la configuration serveur (OPcache, Gzip, cache navigateur) et choisissez un hébergement adapté à votre volume.
Introduction
La vitesse de chargement d'une boutique PrestaShop est un facteur déterminant pour le taux de conversion, le référencement naturel et l'expérience utilisateur. Un site lent fait fuir les visiteurs : selon Google, 53 % des utilisateurs mobiles quittent une page qui met plus de 3 secondes à charger.
Optimiser les performances d'un PrestaShop ne se résume pas à changer d'hébergeur ou activer un cache. C'est une démarche méthodique qui commence par un diagnostic précis, puis s'attaque aux vrais goulets d'étranglement. Voici la méthode que j'applique depuis plus de dix ans sur les boutiques de mes clients.
Étape 1 : Diagnostiquer avec le profiling intégré
Avant toute optimisation, il faut mesurer. PrestaShop embarque un outil de profiling natif qui permet d'analyser finement ce qui ralentit chaque page.
Activer le profiling sur PrestaShop 1.6
Éditez le fichier config/defines.inc.php et modifiez la constante suivante :
define('_PS_DEBUG_PROFILING_', true);
Rechargez ensuite n'importe quelle page de votre boutique. Un panneau de diagnostic apparaît en bas de page, détaillant :
- Le **temps d'exécution** de chaque hook
- Le **nombre de requêtes SQL** et leur durée individuelle
- La **consommation mémoire** de chaque module
- Les **modules chargés** sur la page courante
Activer le profiling sur PrestaShop 1.7 / 8.x
Sur les versions modernes, le fichier a changé d'emplacement. Éditez config/defines.inc.php :
define('_PS_MODE_DEV_', true);
Puis utilisez la Debug Toolbar de Symfony, accessible via l'icône en bas de page. Elle offre un profiling bien plus riche :
// Dans .env ou .env.local (PrestaShop 8.x)
APP_DEBUG=1
APP_ENV=dev
La toolbar Symfony expose les onglets Performance, Doctrine (requêtes SQL), Twig (templates) et Events (hooks).
Attention : Ne laissez jamais le profiling activé en production. Cela ralentit considérablement le site et expose des informations sensibles.
Étape 2 : Auditer et dégraisser les hooks
Le profiling révèle souvent le même problème : des modules se chargent sur des pages où ils n'ont aucune utilité. Un module de commentaires produit qui s'exécute sur la page d'accueil, un module de cross-selling qui tourne sur la page panier… Chaque module inutile ajoute des requêtes SQL et du temps de rendu.
Identifier les modules gourmands
Dans le panneau de profiling, triez les modules par temps d'exécution. Concentrez-vous sur ceux qui dépassent 50 ms ou qui génèrent plus de 10 requêtes SQL.
Décrocher un module d'un hook
Deux méthodes selon votre version :
Via le back-office (toutes versions) :
- Allez dans **Design > Positions** (ou **Modules > Positions** en 1.6)
- Recherchez le module concerné
- Cliquez sur la croix pour le retirer du hook où il n'est pas nécessaire
- **Paramètres avancés > Performances**
- Activez **Concaténation CCC** (Combine, Compress, Cache) pour le CSS et le JavaScript
- Activez le **cache Smarty** (ou Twig en 8.x) en mode "Recompiler si modifié"
- [ ] Profiling activé et analysé sur les 5 pages principales
- [ ] Modules inutiles décrochés des hooks non pertinents
- [ ] Index SQL ajoutés sur les tables critiques
- [ ] OPcache activé et configuré
- [ ] Compression Gzip activée
- [ ] Images optimisées (WebP si possible)
- [ ] Cache navigateur configuré (expires headers)
- [ ] CCC activé pour CSS et JS
- [ ] Hébergement adapté au volume du catalogue
- [ ] Lazy loading implémenté sur les images
Par code (contrôle fin, PrestaShop 8.x) :
Vous pouvez conditionner l'exécution d'un module dans sa méthode de hook :
public function hookDisplayHome($params)
{
// Ne rien faire si on n'est pas sur la page d'accueil
if ($this->context->controller->php_self !== 'index') {
return '';
}
// Logique du module...
}
Hooks les plus critiques à auditer
Étape 3 : Optimiser les requêtes SQL avec des index
PrestaShop génère des centaines de requêtes SQL par page. Sur un catalogue de plusieurs milliers de produits, l'absence d'index appropriés peut transformer une requête de 5 ms en une requête de 500 ms.
Identifier les requêtes lentes
Activez le slow query log de MySQL/MariaDB :
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 0.5;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
Puis analysez les requêtes avec EXPLAIN :
EXPLAIN SELECT * FROM ps_product p
JOIN ps_product_lang pl ON p.id_product = pl.id_product
WHERE pl.id_lang = 1 AND p.active = 1;
Si la colonne type affiche ALL (full table scan), un index est probablement nécessaire.
Index recommandés pour PrestaShop
Voici les index qui améliorent le plus les performances sur les installations standard :
-- Accélérer les recherches produit par catégorie
ALTER TABLE ps_category_product
ADD INDEX idx_id_category_position (id_category, position);
-- Accélérer le filtre par attributs
ALTER TABLE ps_product_attribute
ADD INDEX idx_product_default (id_product, default_on);
-- Accélérer les recherches de stock
ALTER TABLE ps_stock_available
ADD INDEX idx_product_attribute_shop
(id_product, id_product_attribute, id_shop);
-- Accélérer le chargement des images
ALTER TABLE ps_image
ADD INDEX idx_product_cover (id_product, cover);
Précaution : Testez toujours vos index sur un environnement de préproduction. Un index mal conçu peut ralentir les écritures (ajout au panier, passage de commande).
Étape 4 : Choisir le bon hébergement
L'hébergement mutualisé est le premier frein de performance pour la majorité des boutiques PrestaShop. Si votre catalogue dépasse 500 produits ou si vous avez plus de 100 visiteurs simultanés, un serveur dédié ou un VPS devient indispensable.
Recommandations d'infrastructure
Configuration serveur optimale
# Configuration Nginx optimisée pour PrestaShop
server {
# Compression Gzip
gzip on;
gzip_types text/css application/javascript application/json image/svg+xml;
gzip_min_length 1024;
# Cache des assets statiques
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# FastCGI cache pour les pages
fastcgi_cache_valid 200 10m;
fastcgi_cache_bypass $http_cookie;
}
; php.ini optimisé pour PrestaShop
memory_limit = 512M
max_execution_time = 300
opcache.enable = 1
opcache.memory_consumption = 256
opcache.max_accelerated_files = 20000
opcache.validate_timestamps = 0 ; Désactiver en prod
realpath_cache_size = 4096K
realpath_cache_ttl = 600
Étape 5 : Optimisations front-end
Au-delà du back-end, le front-end joue un rôle majeur dans la vitesse perçue.
Activer la combinaison et minification des assets
Dans le back-office PrestaShop :
Optimiser les images
Les images représentent souvent 60 à 80 % du poids total d'une page :
# Convertir les images en WebP (gain de 25-35 %)
find img/p/ -name "*.jpg" -exec cwebp -q 80 {} -o {}.webp \;
Sur PrestaShop 8.x, activez le support WebP natif dans Paramètres avancés > Images.
Implémenter le lazy loading
Sur PrestaShop 8.x, ajoutez l'attribut loading="lazy" aux images produit dans vos templates :
<img src="{$product.cover.medium.url}"
alt="{$product.name}"
loading="lazy"
width="300"
height="300">
Étape 6 : Mettre en place un système de cache avancé
Pour les boutiques à fort trafic, un cache applicatif réduit drastiquement la charge serveur.
Redis comme cache de session et d'objets
// config/settings.inc.php ou parameters.php (PrestaShop 8.x)
// Cache des sessions via Redis
define('_CACHE_ENABLED_', 1);
define('_CACHING_SYSTEM_', 'CacheRedis');
Configuration dans parameters.php (PrestaShop 8.x) :
parameters:
ps_cache_enable: true
ps_caching_system: CacheRedis
redis_server: '127.0.0.1'
redis_port: 6379
Checklist finale d'optimisation
En appliquant méthodiquement ces optimisations, j'obtiens régulièrement des gains de 40 à 70 % sur le temps de chargement des boutiques de mes clients. La clé est toujours la même : mesurer d'abord, optimiser ensuite, et ne jamais toucher à ce qu'on n'a pas diagnostiqué.
Questions fréquentes
Tout ce que vous devez savoir sur ce sujet.
Un projet PrestaShop ?
Discutons-en directement.
193 projets livrés
Lire sur le blog

Alexandre Carette
Expert PrestaShop & Architecture E-commerce
Développeur PrestaShop depuis 2014, 193 projets livrés. Je conçois des architectures headless Nuxt + PrestaShop et des outils d'automatisation IA pour les e-commerçants.