Guten Tag, Guest :)

Willkommen in deiner deutschen Community

Letzter Blog-Beitrag | alle anzeigen

Die MagentoLive Germany 2013 war ein großer Erfolg

Mehr Geschwindigkeit für Magento

Hinweis: Dieser Artikel ist in erster Linie an interessiete Programmierer gerichtet. Einzelne Teile, die sich speziell auf bestimmte Programmteile beziehen und deren Optimierung beschreiben wurden daher nicht übersetzt.

In den letzten Monaten wurde etliche Bereiche von Magento einer Performance-Analyse unterzogen. Da die Funktionen für Version 1.0 nun weitestgehend vorhanden sind, möchten wir einen kleinen Einblick bieten, wie Magento noch schneller und besser geworden ist.

Mit solch umfangreichen Funktionen und der beeindruckenden Flexibilität von Magento wird die Geschwindkeit des Systems manchmal zum Problem. Aber in jeder noch so kleinen Verbesserung steckt auch eine Verbesserung der Geschwindkeit. Die ersten merklichen Unterschiede finden sich im letzten Release.

Enhanchements (englisch)

  • Top menu join queries rewritten, top menu block is cached now on per store view level for every active category
  • Added catalog indexes for layered navigation and search
  • Added dynamic merge and whitespace remove during JavaScript load
  • Footer block is cached
  • Implemented <remove name=""> directive in layout xml to avoid instantiating of unwanted block objects, skipped left/right column blocks generation for pages with 1-column template
  • Most of sales order attributes became static and were moved to one raw table
  • Quote, quote address and quote items entities are stored separately
  • Greatly improved popular tags block generation time
  • Quote optimization for using in top links block and in the sidebar
  • Implemented caching API for using in Mage_Core_Model_Abstract descendant models
  • Removed unnecessary queries from catalog pages and homepage (e.g. reduced total number of database queries from 700 to 60 for homepage, and from 500 to 100 on product listing page on a database of 1000 products and 300 categories).

Durch unsere Performancetests der letzten Zeit haben wir ermitteln können, dass Magento in der Version 0.8.17240 nahezu doppelt so schnell ist wie seine Vorgänger. Die folgende Grafik zeigt einen Ladetest mit Apache Benchmark (ab) - im Vergleich: zwei unterschiedliche Magento Versionen.

image

DYI (Do it Yourself) Performance Enhancements

Sind Sie Betreiber eines eigenen Servers, auf dem auch Magento läuft? Dann können Sie selbst etliche Verbesserungen vornehmen, damit Magento mit möglichst guter Geschwindigkeit arbeiten kann:

  • Installieren Sie einen PHP opcode cache wie zum Beispiel APC oder XCache. Diese liefern merkliche Verbesserungen in der Reaktionszeit von PHP, indem sie PHP in einer vorkompilierten Stufe als ByteCode abspeichern. Dies spart das immer wieder nötige Kompilieren der PHP-Seiten bei jedem Aufruf.
  • Stellen Sie sicher, dass in der Apache Konfiguration KeepAlives aktiviert ist. KeepAlives sind ein Weg, mehrere HTTP Anfragen in einer einzigen TCP-Verbindeung zu kanalisieren. Da das Anlegen einer neuen TCP-Verbindung ebenfalls Zeit benötigt, ist es möglich, den Download aller Skin-Dateien durch diese Option zu beschleunigen.
  • Benutzen Sie für das var Verzeichnis von Magento ein RAM-basiertes Dateisystem. Magento speichert viele Daten für das Caching und die Sessions in Dateien. Die langsamsten Komponenten eines jeden Servers sind die Festplatten. Wenn Sie also eine RAM-basierte Dateisystem-Lösung wie tmpfs verwenden, können die Lese- und Schreibzugriffe enorm zeitsparender abgewickelt werden, da nicht jedes Mal eine Festplatte einen Sektor anlaufen muss.
  • Ändern Sie die Konfiguration des MySQL-Servers um mehr Nutzen aus dem zur Verfügung stehenden Arbeitsspeicher zu ziehen. Die meisten Linux-Distributionen konfigurieren MySQL sehr konservativ, damit die Unterstützung auf den unterschiedlichsten Systemen möglichst groß ist. Wenn ausreichend Speicher vorhanden ist (z.B. 1 GB und mehr) passen Sie die Konfiguration an! Ein Beispiel für einige angepasste my.cnf Zeilen und Bereiche finden Sie im Anschluss.

Ausschnitte einer Beispielkonfiguration my.cnf:

image

Time to Cluster?

Wie jeder weiß, bedeuted wachsendes Geschäft wachsende Probleme. Wenn Ihr Webshop Erfolg hat, benötigen ohne Zweifel mehr Power, um Ihre Kunden zu befriedigen. Das bedeutet: Raus aus der Einzel-Server-Welt - hinein ins Universum des Clusters mit zwei und mehr Servern.

Es gibt verschiedene Möglichkeiten, dies umzusetzen. Der wohl gängigste Weg ist es, mehrere Webserver hinter einem LoadBalancer zu vereinen. Diese Methode ist sehr beliebt, da (a) Webserver billiger als Datenbankserver sind; und (b) es gibt keine Grenze für die Zahl der Webserver.

Hinweis: Magento bietet keine Möglichkeit, automatisch Produktabbildungen auf unterschiedliche Systeme zu veröffentlichen. Sollten Sie von entsprechenden System wenig verstehen, beauftragen Sie bitte einen versionierten Programmierer oder versuchn Sie eine alternative Methode, um Magentos Performance zu verbessern.

Ein anderer Weg, Magento zu mehr Geschwindigkeit zu verhelfen wird “database replication” genannt. Bei dieser Variante stehen zwei oder mehr Datenbankserver im Cluster zur Verfügung. Einer davon bildet den “master” und die restlichen "slaves.” Der "master" ist der einzige server, der Schreibzugriffe erlaubt. Diese Schreibzugriffe werden dann in nahezu Echtzeit auf die anderen Rechner kopiert. Der Vorteil dieser Technik ist, dass Magento Lesezugriffe von jedem beliebigen "slave" durchführen kann, um die Schreibzugriffe für einen einzigen Server zu belassen. Eine Datenbank ist erfahrungsgemäß schwer horizontal zu skalieren, daher bietet sich die Replikation hier als guter Kompromiss an!

Ein Setup für eine solche MySQL-Konfiguration würde den Rahmen sprengen, aber bei Interesse können wir Sie an entsprechende Partner mit dem notwendigen Fachwissen weiterleiten. Hier gibt es ein Tutorial, das alle Details erklärt.

Wenn die MySQL-Replikation schließlich funktioniert, ist es leicht, Magento für den Zugriff auf verschiedene Datenbankserver zu konfigurieren. Die einzige Datei, die dazu bearbeitet werden muss, ist app/etc/local.xml. Nachfolgend finden Sie ein entsprechendes Bespiel. Wie Sie sehen können, werden zwei Datenbank-Verbindungen eingerichtet. Eine default_setup und eine default_read. Die default_setup Verbindung wird für alle Schreibzugriffe verwendet, default_read hingegen für alle Lesezugriffe.

Beispiel: app/etc/local.xml: image

Dieser Beitrag deckt nur einige wenige Möglichkeiten auf, um die Performance einer Seite zu verbessern. Jedes Szenario eines Websitebetreibers ist unterschiedlich, also ist es in den meisten Fällen sinnvoll, einen Fachberater hinzu zu ziehen. Sollten Sie jedoch fit mit Linux sein und vor Konfigurationsdateien keine Scheu haben, versuchen Sie es doch einmal mit unseren Vorschlägen. Sie werden sicherlich überrascht sein.

Sie haben noch Vorschläge? Dann treten Sie der Gruppe Magento Performance and Optimization Group bei und diskutieren Sie mit!

Vergangene Blog-Beiträge | alle anzeigen


Page 1 of 20

RSS: RSS für alle Blog-Beiträge

Community Mitglieder

7thSENSE Magento E-Commerce Systeme
Kommentare Blog: 1
Beiträge Forum: 23
Ort: Stuttgart, München, Reutlingen
symcode
Kommentare Blog: 0
Beiträge Forum: 35
Ort: Köln - Germany
zipza
Kommentare Blog: 0
Beiträge Forum: 15

Community Aktivität

Registrierte Benutzer: 1905631
Themen gesamt: 334754
Antworten gesamt: 448292
Beiträge gesamt: 783046
Eingeloggte Benutzer gesamt: 127
Anonyme Benutzer gesamt: 1
Gäste gesant: 1081
Momentan online:
1232, abobak, Adam_Bin, adevsi777x1, AEdberg, Agregar, aleksaz_wes, Alibek, amalik, amitsaha_jam007, Andreas_Barner, anuradhalk, Arashi, armah, arun_cis, atmadelsol, baltrek, basvanbeers, benevans, bmoti, bpanjkov, celebzee, ciampam9, davorsimek, Degre, designsc, difearqui, dmantovani, Doacon322, dsalmon, durai4052, einfochips, Entrepids, escpc, eskim0, Evangella, evirtualdevelop, Ezreal, faltu, fcky1, ferreirafabio, florite, fpastor, fr_prado, gametopia, global21, gogodigital, Inhence, iosonomichele, israilmolla2014, iverlo, jamieselesti, Jinkzrome, karlosleeds, kintamahadji, Kostadin, KubaBudzynski, kuldeep705, kynhanderson, Latitud WEB, Laurynas, ldpmatic, leandroaps, leonidasmi, llemnus, lm_nhaessig, lurajcevi, magebella, Mage_Workshop, mail4jiva, Mark Willam, maurosergio, mcwholesalers, mediapeople, MELAME, Merand House, mfrosch, mhedberg, mihao85, mindbirds, NileshAKorde, Nils@20x30.de, nutrytec, opzimmerman, orbicio, ostun, ParadoxLabs, patrickflash, piotrekkaminski, pmarco, qballinternet, Rafibd, RAWWebUK, RayBit, rbalabca, rjbr, Rob Staff, robin999, rokhayakebe, runvisual, rwaldock, Saim786, sambolekpetar, sandeeprv, Sarzadm, sebastian_kblr, Sephi, Shindi, skyzem, sola_jignashu, someonelove, tarmolindaru, teuma86, trhudykadr, Tricktrack, tylerofathenry, Vestman, vitkvit, vkrishna143, vlepak, wuyongjin, xaviermad, zanton, zukuru