Warum ist Magento so langsam? [geschlossen]

138

Ist Magento normalerweise so schrecklich langsam?

Dies ist meine erste Erfahrung damit und das Admin-Panel braucht nur Ewigkeiten, um Änderungen zu laden und zu speichern. Es ist eine Standardinstallation mit den Testdaten.

Der Server, auf dem er gehostet wird, bedient andere Nicht-Magento-Sites sehr schnell. Was macht den von Magento verwendeten PHP-Code so langsam und was kann getan werden, um ihn zu beheben?

Herr Euro
quelle
12
Auf welcher Hardware läuft es? Magento benötigt meiner Erfahrung nach ernsthafte Hardware-Unterstützung.
Jitter
3
Ich bitte nicht um Unterstützung, sondern um Code. Meine Hoffnung war, dass jemand dies in der Vergangenheit erlebt und den Code optimiert hatte, um solch träge Verhaltensweisen zu vermeiden. Ich habe keinen bestimmten Codeausschnitt, auf den ich verweisen kann, da er auf die gesamte Site anwendbar ist. Ich werde mich weiter mit der Sache befassen müssen.
Herr-Euro
18
Magento verfügt über mehr als 6000 Klassendateien und ist für den Unternehmensgebrauch und nicht für den Heimgebrauch konzipiert. Denken Sie ohne APC nicht daran, es zu installieren. Ich empfehle es nicht für kleine Läden.
Elzo Valugi
1
In Bezug auf Ihre Flagge, @Jonesome: Diese Frage ist sehr weit gefasst und ... an dieser Stelle wahrscheinlich etwas veraltet. Wir haben jetzt eine eigene Site für Magento-Probleme ( Magento ), die wahrscheinlich eine gute Ressource für alle ist, die an der Optimierung ihres Setups arbeiten.
Shog9
1
@ Shog9 Ich leite ein Team, das Add-Ons für Magento entwickelt und unterstützt. Ich kann Ihnen sagen, dass genau dieses Problem fast täglich auftaucht. Magento ist keine "normale" Lampen-App, da es sehr (sehr) ressourcenintensiv ist. Dieser Thread ist wichtig. Das Schließen erzwingt dieses gemeinsame Gespräch von SO, was für alle unglücklich ist.
Jonesome Reinstate Monica

Antworten:

183

Ich war nur tangential an der Optimierung von Magento für die Leistung beteiligt, aber hier sind einige Gründe, warum das System so langsam ist

  1. Teile von Magento verwenden ein EAV-Datenbanksystem, das auf MySQL implementiert ist. Dies bedeutet, dass das Abfragen eines einzelnen "Dings" häufig das Abfragen mehrerer Zeilen bedeutet

  2. Hinter den Kulissen gibt es viele Dinge (Anwendungskonfiguration, Systemkonfiguration, Layoutkonfiguration usw.), bei denen riesige XML-Bäume im Speicher erstellt und diese Bäume dann nach Informationen "abgefragt" werden. Dies erfordert sowohl Speicher (Speichern der Bäume) als auch CPU (Parsen der Bäume). Einige davon (insbesondere der Layoutbaum) sind riesig. Sofern das Caching nicht aktiviert ist, werden diese Bäume aus Dateien auf der Festplatte und bei jeder Anforderung erstellt .

  3. Magento verwendet sein Konfigurationssystem, um das Überschreiben von Klassen zu ermöglichen. Dies ist eine leistungsstarke Funktion, die jedoch bedeutet, dass jedes Mal, wenn ein Modell, ein Helfer oder ein Controller instanziiert wird, zusätzliche PHP-Anweisungen ausgeführt werden müssen, um festzustellen, ob eine ursprüngliche Klassendatei oder eine überschriebene Klassendatei erforderlich ist. Das summiert sich.

  4. Neben dem Layoutsystem umfasst das Vorlagensystem von Magento viel rekursives Rendern. Das summiert sich.

Im Allgemeinen hatten die Magento-Ingenieure in erster Linie die Aufgabe, ein möglichst flexibles, anpassbares System zu erstellen und sich später um die Leistung zu kümmern.

Das erste, was Sie tun können, um eine bessere Leistung sicherzustellen, ist das Aktivieren des Caching (System -> Cache-Verwaltung). Dies entlastet einige der CPU- / Festplattenblockierungen, die während des Aufbaus der verschiedenen XML-Bäume durch Magento auftreten.

Das zweite, was Sie tun möchten, ist sicherzustellen, dass Ihr Host- und Betriebsteam über Erfahrung in der Leistungsoptimierung von Magento verfügt. Wenn Sie sich auf den 7-Dollar / Monat-Plan verlassen, um Sie durchzuhalten, dann viel Glück damit.

Alan Storm
quelle
10
Vielen Dank für die ausführliche Erklärung. Magento ist in der Tat sehr leistungsfähig und bietet gleichzeitig Flexibilität. Anfangs dachte ich, es sei einfach das Abwürgen der DB-Schreibvorgänge aufgrund von schlecht geschriebenem SQL, aber jetzt ist mir klar, dass hinter den Kulissen, die ursprünglich erwartet wurden, noch viel mehr passiert. Hinweis: Das Caching wurde deaktiviert, da Produkte vom Ladenbesitzer hinzugefügt wurden. Als der Cache aktiviert war, beschwerte er sich über Produkte, die mich nicht zwangen, das Caching zu deaktivieren, während der Shop eingerichtet wurde. Es wird auf einem dedizierten Server gehostet, aber anscheinend muss ich Magento in eine eigene exklusive Box verschieben.
Herr-Euro
4
Ich habe es vor einiger Zeit mit XHProf profiliert. Das XML-Parsing hat sehr viel Zeit in Anspruch genommen - ich denke, Sie sind mit dieser Liste genau richtig.
Morgan Tocker
1
Ich habe mich gefragt, ob das Ausführen von Magento auf HHVM dies verbessern würde. Zuletzt habe ich überprüft, dass HHVM Magento nicht unterstützt, aber wenn es getan würde, würde das helfen?
Bharadwaj Srigiriraju
1
Das erklärt viel. Wissen ist die halbe Miete. Ich sehe nicht ein, wie dies nicht als konstruktiv angesehen werden kann.
Flcoder
Vergessen Sie nicht, die Autoloader-Dateien des Komponisten zu optimieren (siehe Richtlinien zur Leistung von Magento), wenn Sie Composer verwenden, und - für Magento2 - den Produktionsmodus einzuschalten! Lack ist auch eine sehr gute Idee, vorausgesetzt, Ihre Anwendung hat keine Probleme mit dem Ganzseiten-Cache.
Dmitri Sologoubenko
54

Neben den Empfehlungen von Alan Storm zum Caching gibt es zwei Dinge, die Sie im Zusammenhang mit dem Caching besonders empfehlen sollten:

- Stellen Sie sicher, dass sich das Caching im Speicher befindet und nicht auf der Festplatte.

Ich kümmere mich um ein paar Magento-Installationen, und sobald Sie irgendeine Art von Last auf das System bekommen, beginnt memcached viel schneller zu arbeiten. Und es ist kinderleicht, es umzustellen (zumindest im Vergleich zu anderen Magento-Sachen!)

Ein guter Ausgangspunkt ist hier: http://www.magentocommerce.com/boards/viewthread/12998/P30/ - aber wenn Sie memcached noch nicht verwendet haben, sollten Sie sich auch einige allgemeine Informationen dazu ansehen.

- Aktivieren Sie das Vorlagen- / Ansichts-Caching.

Dies ist ein guter Artikel: http://inchoo.net/ecommerce/magento/magento-block-caching/

Es gibt auch gute auf der Magento-Site (Google Magento Block Caching), aber es ist im Moment nicht verfügbar.

Um meine zwei Cent zum Block-Caching hinzuzufügen, würde ich empfehlen, dass Sie Ihre eigenen Blöcke in / app / code / local erstellen, die Kernblöcke erweitern und die Cache-Parameter definieren, sie xxx_Cache nennen und dann Ihr Layout aktualisieren, um stattdessen diese Blöcke zu verwenden der Kern. Auf diese Weise vermeiden Sie, dass Sie Ihre Änderungen verlieren oder das System beschädigen, wenn Sie Magento aktualisieren.

Benlumley
quelle
3
Danke für die Punkte. Ich werde mir memcached ansehen, das ich vorher noch nicht in der Produktion verwendet habe. Gute Idee, auch die Blöcke zu klonen.
Herr Euro
3
Ich stimme dem zu, was benlumbey gesagt hat: Ich verwende memcached nicht, wenn ich Windows Server ausführe, aber ich speichere das Verzeichnis / var auf einem Solid-State-Laufwerk, und das hat einen großen Unterschied für mich gemacht.
Rick J
@rickj - Ja, alles, was den Ordner ./var schneller macht, hilft definitiv. Ich habe versucht, tmpfs vor dem Memcaching zu verwenden, und auch davon einen ordentlichen Schub bekommen.
Benlumley
Ich würde hinzufügen, um den apc-Cache nur für einen einzelnen Knoten zu verwenden, da er weniger Overhead zu haben scheint als für eine Umgebung mit mehreren Knoten zwischengespeichert.
sbditto85
2
Ja stimmt. Es gibt jedoch einige Einschränkungen, je nachdem, wie Sie PHP ausführen, können Sie für jeden PHP-Prozess einen separaten APC-Cache erhalten - was noch weniger optimal ist, wenn Sie Ihre PHP-Prozesse alle X-Anforderungen durchlaufen.
Benlumley
23

Wenn Sie es noch nicht gesehen haben, haben Magento und Rackspace gemeinsam ein Whitepaper zur Leistungsoptimierung von Magento erstellt. Es ist exzellent. https://support.rackspace.com/whitepapers/building-secure-scalable-and-highly-available-magento-stores-powered-by-rackspace-solutions/

--- bearbeiten ---

Eine weitere großartige Ressource, die neu verfügbar ist (Oktober 2011), ist: http://www.sessiondigital.com/assets/Uploads/Mag-Perf-WP-final.pdf

(Danke an Alan Storm in diesem Fall.)

Laizer
quelle
Vielen Dank für das Update, ich werde es später ausführlich lesen.
Herr Euro am
2
Dieser zweite Link ist jetzt tot.
Laizer
1
Der erste Link ist auch tot.
Edward
Links sind kaputt. Ner
Ner
1
Direkter Link zum Whitepaper von Rackspace (Link 1).
Levi Figueira
17

Es gibt möglicherweise auch einen sehr nicht offensichtlichen Grund, warum Ihre Administrationsoberfläche sehr langsam ist. Magento hat ein Modul namens Mage_AdminNotification. Versuchen Sie, diese ext zu deaktivieren. Denn was es tut, ist magentocommerce.com nach neuen Update-Nachrichten abzufragen. Wenn ihre Server langsam sind, wartet Ihre Administrationsseite und ist aufgrund der Netzwerkverzögerung und des Ladens der externen Nachrichten tatsächlich langsam. Wenn Sie Ihre ausgehende Serververbindung über eine Firewall gesichert haben, kann dies noch frustrierender sein, da die Administrationsoberfläche auf das Zeitlimit wartet, wenn sie magentocommerce.com nicht erreichen kann

So deaktivieren Sie es: Gehen Sie zu System -> Konfiguration, scrollen Sie nach unten und klicken Sie auf Erweitert (im Abschnitt Erweitert). Jetzt deaktivieren Mage_AdminNotificationund speichern!

Sam Figueroa
quelle
4
Dies machte einen signifikanten Unterschied in der Leistung in meiner lokalen Entwicklungsumgebung, was mich immer frustriert hatte, wie langsam es auf einer sehr schnellen Entwicklungsbox lief. Danke dir!
random_user_name
In Magento2: Stores-> Configuration-> Advanced-> Advanced, dann deaktivieren Mage_AdminNotification.
Scott C Wilson
6

Ich habe nur oberflächliche Erfahrungen mit Magento. Ich habe es auf einem gemeinsam genutzten Grid-Server installiert und das Laden der Seite war düster ~ 5 + Sekunden. Aus Versehen habe ich es auf meinem für CMS-Sites optimierten dedizierten Server installiert, und es fühlte sich sehr, sehr bissig an.

Mein dediziertes Hosting hatte ~ 10 Joomla! Websites und eine VBullitin-Website wird ausgeführt.

Ich vermute, dass es beim Shared Hosting einfach nicht performant sein wird. Das Überabonnement lässt einfach nicht genügend Ressourcen zu, damit Magento ordnungsgemäß ausgeführt werden kann.

Creuzerm
quelle
6

Ich bin mehr an der Optimierung verwalteter Server in meinem Unternehmen beteiligt, habe aber möglicherweise einige Tipps für Sie. Zunächst können Sie den Code mithilfe der Code-Tracing-Funktion des Zend-Servers genauer betrachten. So können Sie sehen, wo und wann die Dinge schmutzig werden.

Ich teile völlig Benlumleys Überlegungen zum Cache. Die meisten von uns gehosteten Sites verfügen nicht einmal über die Block-Caching-Aktivierung. Dieser Cache muss explizit aufgerufen und nicht "angenommen" werden. Wenn Ihr Code noch nicht an diesem Mechanismus teilgenommen hat, sollten Sie ihn unbedingt ausprobieren. Wenn Sie eine EE-Version haben, können Sie die ganze Seite aufrufen, um das Beste aus dem Biest herauszuholen.

Ein Reverse-Proxy hilft auch sehr. Dadurch werden die statischen Ressourcen zwischengespeichert, wodurch der Druck auf den PHP-Interpretationsstapel Ihrer Frontserver erheblich verringert wird.

Vergessen Sie nicht, den Sitzungs- und Magento-Cache auf eine RAM-Disk zu schreiben. Dies wird Sie definitiv auch auf ein anderes Leistungsniveau bringen.

Hier gibt es noch viel zu sagen, aber mir läuft die Zeit davon. Sie müssen wissen, dass eine gute Site, die in einer 1.4.1 CE-Version gut codiert ist, auf einem 2x5650 Xeon + 16 GB RAM-Server läuft und über einen Rproxy verfügt, bis zu 50.000 eindeutige Besucher pro Tag mit reibungslosen Seiten für alle Besucher aufnehmen kann .

Kameo
quelle
5

Der Wechsel von Apache zu LiteSpeed ​​hat uns sehr geholfen. Zusätzlich zu: Bearbeiten der MySQL-Einstellungen, Installieren von Fooman Speedster (Modul zum Komprimieren / Kombinieren von JS- und CSS-Dateien) und Installieren von APC. Magento hat außerdem ein Whitepaper veröffentlicht, in dem erläutert wird, wie die Enterprise Edition die beste Leistung erzielt. Es gilt jedoch auch für die anderen Versionen: http://www.magentocommerce.com/whitepaper/

Jonathan
quelle
4

Es gibt viele Gründe, warum Ihr Magento-Einkaufswagen langsam fahren könnte, aber keine Entschuldigung, denn es gibt verschiedene Möglichkeiten, das Problem zu lösen und es verdammt schnell zu machen. Das Aktivieren von Gzip durch Ändern Ihrer htaccess-Datei ist ein Anfang. Sie können auch die Fooman Speedster-Erweiterung installieren. Der verwendete Servertyp bestimmt auch die Geschwindigkeit Ihres Geschäfts. Weitere Tipps und eine bessere Erklärung finden Sie hier http://www.interactone.com/how-to-speed-up-magento/

Thomas
quelle
4

Bei der Erstinstallation hatte ich Seiten, deren Laden 30 Sekunden dauerte. Mein Server war nicht voll mit RAM oder Prozessor, daher wusste ich nicht, was ich tun sollte. Beim Betrachten des Firebug-Netzpanels wurden ungefähr 100 Dateien pro Seite geladen, und es dauerte lange, bis jede Verbindung hergestellt war. Nach der Installation von fooman speedster und dem gzip im htaccess waren die Ladezeiten auf 3 Sekunden gesunken, wie bei anderen Einkaufswagen auf meinem Server.

Scott
quelle
3

Magento ist sehr langsam, da das Datenbankdesign nicht sehr gut ist. Der Code ist ein Chaos und sehr schwer zu aktualisieren und zu optimieren. Alle Optimierungen erfolgen also über den Cache anstelle von Code.

Andererseits. Es ist ein Webshop mit vielen Tools. Wenn Sie also einen flexiblen Webshop benötigen, kaufen Sie einfach einen sehr leistungsstarken Server und Sie werden in Ordnung sein.

Entwickler
quelle
1
Das Datenbankdesign ist eigentlich sehr gut und flexibel.
Schwarz
3

Es wird auch auf Funktionalität und Leistung ankommen.

Die Rohleistung wird mit nginx, php-fpm, memcached, apc und einem ordnungsgemäß gestalteten Server erzielt.

Funktionen wie Plesk- und Magento-Leistung können verwaltet werden, indem die gesamte Infrastruktur beim Entwurf einer Magento-Leistungswolke berücksichtigt wird.

ProContractors
quelle