web-dev-qa-db-fra.com

Pourquoi Magento est-il si lent?

Est-ce que Magento est habituellement si terriblement lent?

C’est ma première expérience et le panneau d’administration demande simplement du temps pour charger et enregistrer les modifications. C'est une installation par défaut avec les données de test.

Le serveur sur lequel il est hébergé dessert très rapidement les sites non-Magento. Qu'en est-il du code PHP utilisé par Magento qui le rend si lent, et que peut-on faire pour le résoudre?

134
mr-euro

Je n'ai participé à l'optimisation de la performance de Magento que de manière tangentielle, mais voici quelques raisons pour lesquelles le système est si lent

  1. Certaines parties de Magento utilisent un système de base de données EAV implémenté par-dessus MySQL. Cela signifie interroger une seule "chose" signifie souvent interroger plusieurs lignes

  2. Il y a beaucoup de choses dans les coulisses (configuration de l'application, configuration du système, configuration de la présentation, etc.) qui impliquent la création en mémoire d'arbres XML géants, puis la "recherche" d'informations de ces mêmes arbres. Cela prend à la fois de la mémoire (stockage des arbres) et du processeur (analyse des arbres). Certains d'entre eux (en particulier l'arbre de disposition) sont énormes. En outre, sauf si la mise en cache est activée, ces arborescences sont construites à partir de fichiers sur le disque et à chaque demande.

  3. Magento utilise son système de configuration pour vous permettre de remplacer des classes. C'est une fonctionnalité puissante, mais cela signifie qu'à chaque fois qu'un modèle, une assistance ou un contrôleur est instancié, des instructions supplémentaires PHP doivent être exécutées pour déterminer si un fichier de classe original ou un fichier de classe de substitution est nécessaire. Cela ajoute.

  4. Outre le système de présentation, le système de modèles de Magento implique beaucoup de rendu récursif. Cela ajoute.

En règle générale, les ingénieurs de Magento ont été chargés avant tout de créer le système le plus flexible et personnalisable possible et de se soucier des performances ultérieurement.

Pour améliorer les performances, la première chose à faire est d'activer la mise en cache (Système -> Gestion du cache). Cela soulagera une partie du blocage processeur/disque qui se produit pendant que Magento construit ses différentes arborescences XML.

La deuxième chose que vous voudrez faire est assurez-vous que votre hôte et votre équipe d’exploitation a de l’expérience en matière de réglage des performances de Magento. Si vous comptez sur le plan de 7 $/mois pour vous mener à bien, eh bien, bonne chance avec ça.

179
Alan Storm

En plus des recommandations d'Alan Storm sur la mise en cache, il y a deux choses que je vous recommande spécifiquement d'examiner dans le cadre de la mise en cache:

- Assurez-vous que la mise en cache est dans memcached, plutôt que sur disque.

Je gère quelques installations de magento et une fois que vous avez une charge quelconque sur le système, memcached commence à fonctionner beaucoup plus rapidement. Et il est très facile de le changer (par rapport à d’autres magento au moins!)

Le bon point de départ est ici: http://www.magentocommerce.com/boards/viewthread/12998/P30/ - mais si vous n’avez pas utilisé memcached du tout auparavant, cela vaut la peine de regarder en général info à ce sujet aussi.

- Activer la mise en cache des modèles/vues.

C'est un bon article: http://inchoo.net/ecommerce/magento/magento-block-caching/

Il y en a de bons sur le site magento aussi (mise en cache de bloc de Google magento), mais sa baisse pour le moment.

Pour ajouter mes deux sous à la mise en cache des blocs, je vous conseillerais de créer vos propres blocs dans/app/code/local, en étendant ceux du noyau et en définissant les paramètres de cache, nommez-les xxx_Cache, puis mettez à jour votre mise en page pour utiliser ces blocs de ceux de base. De cette façon, vous évitez de perdre vos modifications ou de casser le système lorsque vous mettez à niveau magento.

54
benlumley

Si vous ne l'avez pas encore vu, Magento et Rackspace se sont associés pour créer un livre blanc sur le réglage des performances de Magento. C'est excellent. https://support.rackspace.com/whitepapers/building-secure-scalable-and-highly-available-magento-stores-power-by-rackspace-solutions/

--- modifier ---

Une autre excellente ressource, récemment disponible (octobre 2011), est la suivante: http://www.sessiondigital.com/assets/Uploads/Mag-Perf-WP-final.pdf

(Merci à Alan Storm pour celui-ci.)

23
Laizer

Il y a peut-être aussi une raison très peu évidente pour laquelle votre interface d'administration est très lente. Magento a un module nommé Mage_AdminNotification. Essayez de désactiver cette extension. En effet, il interroge magentocommerce.com sur les nouveaux messages de mise à jour. Si leurs serveurs sont lents, votre page d’administration attend et est effectivement ralentie à cause du décalage du réseau et du chargement des nouvelles externes. Si vous avez sécurisé votre connexion de serveur sortant via un pare-feu, cela peut être encore plus frustrant, car l'interface d'administration attendra le délai d'attente lorsqu'elle ne peut pas atteindre magentocommerce.com

Pour le désactiver: allez dans Système -> Configuration, faites défiler vers le bas et appuyez sur Avancé (dans la section Avancé). Désactivez maintenant Mage_AdminNotification Et enregistrer!

17
Sam Figueroa

Je n'ai qu'une expérience superficielle avec Magento. Je l'ai installé sur un serveur de grille partagé et le chargement de la page a été lamentable ~ 5 secondes. Sur une alouette, je l’ai installé sur mon serveur dédié optimisé pour les sites CMS, et je me suis senti très très vif.

Mon hébergement dédié avait environ 10 Joomla! sites et un site VBullitin en cours d'exécution.

À mon avis, cela ne sera tout simplement pas performant en hébergement partagé. La surabonnement ne permettra pas à Magento de disposer de suffisamment de ressources pour fonctionner comme il se doit.

6
creuzerm

Je suis davantage impliqué dans l'optimisation du serveur géré dans mon entreprise, mais j'ai peut-être quelques conseils à vous donner. Tout d'abord, vous pouvez examiner le code de plus près à l'aide de la fonctionnalité de traçage de code du serveur Zend. Cela vous permettra de voir où et quand les choses se salissent.

Je partage totalement la considération de Benlumley concernant la cache. La plupart des sites que nous hébergeons ne disposent même pas de la mise en cache par blocage. Ce cache doit être appelé explicitement et non "assumé". Donc, si votre code n'a pas encore pris part à ce mécanisme, c'est quelque chose que vous voulez absolument essayer. Si vous avez une version EE, vous pouvez obtenir la page complète afin d'obtenir le meilleur de la bête.

Un proxy inverse aidera également beaucoup. Il va mettre en cache les ressources statiques, réduisant ainsi considérablement la pression sur la pile d'interprétation php de vos serveurs frontaux.

N'oubliez pas d'écrire les sessions et le cache Magento sur un disque RAM. Cela vous permettra également d'atteindre un autre niveau de performances.

Il reste encore beaucoup à dire, mais le temps me manque. Vous devez savoir qu'un bon site, bien codé dans une version 1.4.1 CE, fonctionnant sur un serveur 2x5650 Xeon + 16 Go RAM et ayant un Rproxy sur le dessus peut prendre jusqu'à 50 000 visiteurs uniques par jour avec des pages lisses à tout le monde.

6
kameo

Passer d'Apache à LiteSpeed ​​nous a beaucoup aidés. En plus de: modifier les paramètres de MySQL, installer Fooman Speedster (module pour compresser/combiner les fichiers js et css) et installer APC. Magento a également publié un livre blanc sur la manière d'obtenir les meilleures performances de l'édition entreprise, mais il est également applicable aux autres versions: http://www.magentocommerce.com/whitepaper/

5
Jonathan

Il existe de nombreuses raisons pour lesquelles votre panier Magento pourrait fonctionner lentement, mais aucune excuse n’excuse, car il existe de nombreuses façons de régler le problème et de le rendre extrêmement rapide. Activer Gzip en modifiant votre fichier htaccess est un début. Vous pouvez également installer l'extension fooman speedster. Le type de serveur utilisé déterminera également la vitesse de votre magasin. Plus de conseils et une meilleure explication ici http://www.interactone.com/how-to-speed-up-magento/

4
Thomas

il faudra aussi parler de fonctionnalité et de performance.

Les performances brutes sont obtenues avec nginx, php-fpm, memcached, apc et un serveur conçu de manière appropriée.

Des fonctionnalités telles que les performances de plesk et de magento pourraient être gérées en prenant toute l’infrastructure en perspective lors de la conception d’un cloud de performance magento.

3
ProContractors

Lorsque j'ai installé pour la première fois, j'avais des pages qui prenaient 30 secondes pour se charger. Mon serveur n'était pas saturé en RAM ni en processeur, donc je ne savais pas quoi faire. En regardant le panneau réseau de Firebug, il chargeait environ 100 fichiers par page, et chacun prenait beaucoup de temps pour se connecter. Après l’installation de fooman speedster et du gzip dans les chargements htaccess, le temps a été réduit à 3 secondes, comme s’ils avaient été placés dans d’autres paniers sur mon serveur.

3
Scott

Magento est très lent car la conception de la base de données n'est pas très bonne. Le code est un désordre et très difficile à mettre à jour et à optimiser. Toutes les optimisations sont donc effectuées via le cache au lieu du code.

D'autre part. C'est une boutique en ligne avec beaucoup d'outils. Donc, si vous avez besoin d'une boutique en ligne flexible, achetez simplement un serveur très puissant et tout ira bien.

3
developer