L’impact de la performance sur le e-commerce

Chaque seconde de chargement supplémentaire réduit le taux de conversion de 7 %. Pour une boutique Prestashop générant 100 000 € par mois, passer de 4 à 2 secondes peut représenter 14 000 € de chiffre d’affaires supplémentaire.

Lueur Externe audite et optimise les performances des boutiques Prestashop de ses clients.

Optimisations serveur

PHP et OPcache

; php.ini optimisé pour Prestashop
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
opcache.revalidate_freq=0

; Augmenter les limites
memory_limit=512M
max_execution_time=300
realpath_cache_size=4096K
realpath_cache_ttl=600

MySQL / MariaDB

# my.cnf optimisé
[mysqld]
innodb_buffer_pool_size=2G
innodb_log_file_size=512M
innodb_flush_log_at_trx_commit=2
query_cache_type=1
query_cache_size=128M
query_cache_limit=2M
tmp_table_size=256M
max_heap_table_size=256M

Redis pour les sessions et le cache

// app/config/parameters.php
'parameters' => [
    'ps_cache_enable' => true,
    'ps_caching' => 'CacheRedis',
    'redis_server' => '127.0.0.1',
    'redis_port' => 6379,
],

Optimisations applicatives

Identifier les modules lents

-- Mesurer le temps d'exécution des hooks
SELECT h.name AS hook_name, m.name AS module_name
FROM ps_hook_module hm
JOIN ps_hook h ON h.id_hook = hm.id_hook
JOIN ps_module m ON m.id_module = hm.id_module
WHERE m.active = 1
ORDER BY h.name;

Désactivez les modules inutilisés et remplacez les modules lents par des alternatives optimisées.

Optimiser les requêtes SQL

// Mauvais : requête N+1
foreach ($products as $product) {
    $features = Product::getFeaturesStatic($product['id_product']);
}

// Bon : requête unique
$productIds = array_column($products, 'id_product');
$features = Db::getInstance()->executeS(
    'SELECT pf.id_product, fl.name, fvl.value
     FROM ' . _DB_PREFIX_ . 'feature_product pf
     JOIN ' . _DB_PREFIX_ . 'feature_lang fl ON fl.id_feature = pf.id_feature
     JOIN ' . _DB_PREFIX_ . 'feature_value_lang fvl ON fvl.id_feature_value = pf.id_feature_value
     WHERE pf.id_product IN (' . implode(',', array_map('intval', $productIds)) . ')
     AND fl.id_lang = ' . (int) $this->context->language->id
);

Optimisations front-end

Images

  • Utiliser WebP avec fallback JPEG
  • Lazy loading natif (loading="lazy")
  • Dimensions explicites pour éviter le CLS
  • Compression à 80 % de qualité

CSS et JavaScript

  • Combiner et minifier les fichiers
  • Charger le CSS critique en inline
  • Différer le JavaScript non essentiel
  • Supprimer les fichiers CSS/JS des modules désactivés

CDN et cache HTTP

# Configuration Nginx avec cache
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2|svg|webp)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
    add_header Vary "Accept-Encoding";
}

# Compression Gzip
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml;
gzip_min_length 1000;

Monitoring

Mettez en place un monitoring continu :

  • Google PageSpeed Insights (score Lighthouse)
  • WebPageTest (waterfall détaillé)
  • New Relic ou Blackfire (profiling PHP)
  • Slow query log MySQL

Conclusion

L’optimisation des performances Prestashop est un travail continu qui touche le serveur, l’application et le front-end. Lueur Externe propose des audits de performance complets et des optimisations sur mesure pour maximiser vos conversions.