Skip to content

Magento : optimiser les performances

by julien on septembre 12th, 2008

Un petit point sur les performances de Magento Commerce et sur les optimisations possibles.

Optimiser son installation de Magento

Vous venez de tester Magento pour votre prochaine boutique en ligne (ou pour remplacer un vieillissant Oscommerce impossible à maintenir), et vous venez de découvrir sa lourdeur qui fait baver votre serveur web.

Voici quelques tips pour optimiser un peu magento. Ces idées ne sont pas nouvelles, elles proviennent de l’entreprise qui développe magento (Varien), qui les proposait déjà pour magento 1.0.x alors que les testeurs s’accordaient déjà sur son poids problématique.

Malgré les améliorations qui on été faites sur son code (surtout avec le passage en 1.1.x), ces optimisations ne sont pas du luxe.

Je ne ferais donc qu’une traduction du billet du blog magento, en ajoutant mes commentaires.

1°) Installer un cache opcode sur PHP (comme APC ou XCache)

Un opcode cache pour php devrait toujours être installé sur un serveur en production car leur fonctionnement même ne peut pas être incompatible avec vos application (sauf gros problème … comme d’ab).
Par défaut, php compile le code des fichiers php d’une application à chaque appel. Cette compilation prend un temps non négligeable puisque il faut parser le fichier, trouver les correspondances avec les fonctions, faire les includes… Sur un serveur en production c’est totalement débile, vos fichiers ne changent (presque) jamais ! Pourquoi les recompiler à chaque appel ? (plusieurs miliers d’appels par jour pour une boutique qui tourne bien, surtout sur les fichiers TOUJOURS utilisés dans le cas d’un CMS dynamique).

Un opcode cache ajoute donc une fonctionnalité toute simple: il vérifie que le fichier php n’a pas changé (avec sa date), et garde la version compilée si le fichier est le même. Le temps de vérification de date est négligeable par rapport au temps gagné en compilation. Au final, contrairement à un cache de sortie qui peut poser des problèmes de mises à jour, un opcode cache n’est jamais bloquant puisque les fichiers php sont bien interprété à chaque fois (requetes sql…), seul la partie lecture du fichiuer et pré-compilation est shuntée.

2°) Activer les KeepAlives dans la configuration apache.

Cette configuration intervient sur la fonction KeepAlives du protocole HTTP. Cette façon de fonctionner permet à une connection HTTP d’envoyer plusieurs fichiers (ex: index.html + les dizaines d’images et/ou javascripts et/ou css présentes sur la page) en une fois. Si cette fonction n’est pas activée, 1 page contenant 20 images, 2 CSS et 2 JS génerera 25 conenxions TCP ce qui charge d’autant plus apache et ralenti le chargement.

3°) Utiliser un système de fichiers virtuel pour le dossier Magento

La ça devient plus compliqué. Puisque magento est très découpé dans sa conception, il est composé de miliers de fichiers php. De plus, Magento fait énormément usage des sessions en fichier et des fichiers de cache. Leur accès est très lent puisqu’un disque dur est souvent la partie la plus lente du serveur. Ils conseillent donc un système de fichiers en RAM, comme tmpfs sous linux.

4°) Configurer MySQL pour mieux utiliser la RAM

Magento utilise beaucoup de requetes SQL. Si vous avez beaucoup de RAM (1go ou plus ce qui est recommandé pour un serveur web qui accueil ce type d’outil), il faut attribuer une bonne quantité de mémoire à MySQL (à calculer selon les autres services hébergés sur la même machine).
D’origine, certaines configurations de MySQL (my.conf) limitent à 64Mo ce qui est bien trop peu.

Un magento optimisé plus rapide ?

Normalement avec tout ça, n’importe quelle application php/mysql devient plus rapide. Vu la lourdeur d’un magento (par rapport aux habitudes sur ce type d’application), ça devient de plus en plus intéressant de faire des petites économies sur toutes les configurations.

From → Web

One Comment
  1. Vincent permalink

    Bonjour,
    faisant une analyse concernant Magento , j’aimerais savoir si vous aviez quelques chiffre ou un ordre de grandeur, un seuil à partir duquel Magento devient lourd.
    Il s’agit, dans mon cas, de faire une analyse pour le client afin de déterminer si oui ou non on utilisera Magento.

    Merci par avance !

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS