C’est un fait et tous les développeurs de Magento s’en plaignent un jour ou l’autre : Magento est lent.
Alors il existe pas mal de “trucs” pour accélérer une boutique Magento :
- optimiser la configuration de mysql, apache…
- activer le cache, si possible le full page cache
- utiliser APC ou Xcache ou autre
- activer la compression gzip
- utiliser un CDN pour les fichiers statiques
- utiliser la mémoire comme espace de stockage du cache, des sessions
- optimiser les images
- minifier les css, les javascripts
- utiliser le “flat catalog” de Magento
- utiliser la compilation de Magento
Et il y en a d’autres ! En fait toutes ces astuces ou presque concernent des “bonnes pratiques” qui ne sont pas vraiment spécifiques à Magento… et même si on les applique à la lettre la lourdeur de Magento reste un problème sur les boutiques assez conséquentes.
La solution : Varnish !
Varnish est un serveur de cache HTTP ultra-puissant. Le principe est simple : après un premier chargement de page, les suivants chargements seront ultra rapides car ils ne feront plus appel à des traitements serveurs ou des requêtes de base de données. En fait c’est le principe du cache me direz-vous, oui sauf que Varnish va au-dela des performances des autres caches car il s’agit en fait d’un proxy qui se place directement entre votre frontend et votre serveur web (apache, nginx) et permet de mettre toute une page en cache pour la délivrer à tous les clients tout en gérant des “blocs dynamiques” propres à chacun (par ex : l’affichage du panier ou du nom) via les ESI.

Une fois que vous avez installé Varnish sur votre serveur, il y a de fortes chances que vous soyez déçus par votre Magento car, de base, la configuration de Varnish n’est pas tellement adaptée, ne serait-ce que parce qu’il ne met pas en cache les pages avec des cookies, et que Magento crée un cookie dès que l’on arrive sur le site…
Du coup, quelques modules Magento ont vu le jour pour optimiser ça. J’en ai essayé plusieurs… mais celui que j’ai retenu, et de loin, et que je vous recommande, c’est magento-turpentine.
Le développeur est de plus sympa, réactif, vous aidera en cas de problème, et le module est vraiment bien fini même si c’est toujours une version beta. Les fonctionnalités apportées sont :
- Cache “full page“, avec utilisation des blocs dynamiques chargés avec les ESI Varnish ou par Ajax
- Mise en cache des pages même pour les visiteurs identifiés, même pour les pages avec session/cookie
- Configuration de Varnish via l’interface de Magento pour la plupart des choses (pour les réglages vraiment pointus et spécifiques à votre application il faudra quand même mettre la main à la pâte)
- Permet de générer et d’appliquer votre configuration Varnish “à la volée” sans redémarrage du serveur
- Blacklistage d’URL ou de paramètres GET
- Automatisation du vidage de cache par action (sauvegarde d’un produit par exemple)
- Support pour les installations Magento multi-boutique/multi-site
Je vous laisse découvrir les fonctionnalités plus en détails sur le site de l’extension…
J’ai eu à mettre en place ce Varnish dans un cas assez complexe sur les sites de la marque Alice’s Garden, www.resine-factory.com & ses petites frères :
- Magento multi-boutique
- Les boutiques sont sur des domaines différents
- Les boutiques ont un panier partagé ET session client partagée (identification sur site-A.com conservée lors du passage à site-B.com)
- Paramètres Google Analytics dans les URL pour tracker le traffic venant du site-A.com vers site-B.com
Les problèmatiques ont été multiples :
- les paramètres liées au transfert de session d’un domaine à l’autre ainsi que les paramètres liés à Google Analytics doivent bien être conservés MAIS ne doivent pas être pris en compte pour la mise en cache de la page ou pour aller rechercher la dite page dans le cache : tous les utilisateurs doivent utiliser la même page en cache même si ces paramètres sont différents
- en revanche, les autres paramètres (exemple : choix d’un attribut dans une page catalogue avec filtres) doivent bien être pris en compte pour la mise en cache, si on filtre sur la couleur bleue on ne s’attend pas à avoir la même page que les éléments de couleur rouge !
- Varnish doit évidemment bien transmettre la session d’un domaine à l’autre
- certains blocs sont chargés dynamiquement et spécifiques au client
- les produits sont mis à jour par un service externe
Bientôt, un article plus technique sur la mise en place d’une configuration Varnish adaptée à ces besoins !

