In diesem Artikel erfährst Du, wie Du die maximale Performance aus deinem Shop herausholst. Hierzu geben wir Dir einige Tipps und Tricks und nennen Dir hierfür verschiedene Stellschrauben.
Falls Du ein erweitertes technisches Know-How besitzt, findest Du auch noch weitere Informationen in unserer Developer Dokumentation. Performance Tweaks - Shopware Developer
Topic | Standard | Optimal | Info |
---|---|---|---|
PHP-Version | - | FPM | PHP-FPM ist eine deutlich performantere und moderne Lösung, um Prozesse zu verwalten. |
Bytecode-Cache | APC | ZendOpcache + APCu | Es sollte in jedem Fall ein Bytecode-Cache installiert und korrekt konfiguriert sein - dies beschleunigt die Ausführung des PHP-Stacks nochmal um bis zu 25 % |
Database | >= MySQL 8 oder MariaDB >= 10.3.22 | >= MySQL 8 | Sofern kein Elastic bzw. OpenSearch verwendet wird, sollte MySQL, statt MariaDB genutzt werden. An einigen Stellen des Codes verwenden wir JSON-Felder. Sobald es um das Filtern, Sortieren oder Aggregieren von JSON-Feldern geht, ist MySQL dem MariaDB-Fork voraus. |
Webserver | >= Apache 2.4 | NGINX | Die Architektur von NGINX ermöglicht es gegenüber von Apache2 bei Shops mit sehr hohen Zugriffszahlen besser zu performen. |
Debug-/Profiling | - | - | Achte darauf, dass auf dem Produktivserver keine Profilingtools wie xDebug oder XhProf aktiv sind - diese reduzieren die Ausführungsgeschwindigkeit von PHP deutlich. Ebenfalls sollten die Shopware Debug & Benchmark-Plugins nie im Produktivbetrieb verwendet werden |
Mit jedem neuen Shopware-Release fließen auch Performance-Verbesserungen in die Entwicklung ein. Daher ist es ratsam, jeweils zeitnah auf die neu verfügbare, aktuellste Shopware Version umzusteigen.
Der Hoster muss zum geplanten Einsatz-Szenario passen und sollte einen Upgrade-Pfad für das gewählte Hosting-Paket anbieten, sodass dieses zusammen mit den Anforderungen wachsen kann. Auf folgende Punkte solltest du achten:
Shared Hosting / VServer / Dedicated Server
Software-Stack sollte sich mit unseren Empfehlungen (siehe oben) decken
Shopware Erfahrung vorhanden?
Shopware Referenz-Shops?
Grundsätzlich empfehlen wir einen unserer zertifizierten Hoster zu nutzen. Eine aktuelle Übersicht findest Du unter folgendem Link: Shopware Hosting Partner
Die angegebenen Ladezeiten sind nur als Indikator zu verstehen, da diese je nach Anzahl / Struktur des Shops und dem aktuellen Traffic abweichen können.
Die nachfolgenden Analyse-Schritte solltest Du in einem Testsystem durchführen, eine Anleitung hierzu findest Du hier.
ausnahmslos alle Drittanbieter Erweiterungen deaktivieren
Standard Responsive Theme zuweisen
Cache leeren & aufwärmen
Performance prüfen
Sollten diese Schritte zu einer Verbesserung geführt haben, gilt es die Faktoren Schritt-für-Schritt auszuschließen. Falls es weiterhin eine nicht zufriedenstellende Performance gibt, empfiehlt es sich die folgenden Benchmark-Werte zu ermitteln:
Wie viele Artikel hat der Shop? Wie viele Varianten?
Wie viele Kategorien hat der Shop? Wie viele Kategoriezuweisungen?
Wie viele gleichzeitige Zugriffe gibt es?
An welcher Stelle macht sich die schlechte Performance bemerkbar?
Kann hier eine Uhrzeit definiert werden, bei der es zu den Problemen kommt?
Damit die Ergebnisse vergleichbar sind, wird empfohlen das Shopware Demo-Daten Package als Test-Grundlage zu verwenden. Anschließend kannst Du über die Netzwerkkonsole Deines Browsers die einzelnen Ladezeiten ermitteln.
Relevant ist die Ladezeit der Seite selbst - das ist in der Regel der erste Eintrag in der Liste. Rufe dann die Startseite, Listing und Detailseite jeweils 5 bis 10 mal auf und ermittel aus den einzelnen Ausführungszeiten einen Mittelwert.
Aufruf über Linux-Shell:
ab -n 10 -c 1 http://www.domain.tld:80/{startseite,kategorie,listing}
Dort dann jeweils den Median der Total-Time (Connection-Times) als Wert übernehmen.
Task | Ansprechpartner | Info |
---|---|---|
Problematische Komponenten identifizieren | Kunde / Hoster | Wo genau treten Performance-Engpässe auf? Webserver, Datenbankserver, PHP-Stack, etc. |
SQL-Slow-Query Auswertung | Hoster | Welche Datenbank-Queries beeinflussen die Gesamtperformance des Shops? |
Hosting-Plattform Analyse | Hoster / Kunde | Ist die Hosting-Umgebung geeignet für die Größe, den Traffic, des Shops? Aktuelle / Empfohlene Server-Komponenten im Einsatz? Dedicated Server - Also kein VHost oder Webspace-Paket - Keine Shopware fremden Applikationen auf dem Server im Einsatz? |
Anbindungen | Kunde | Werden regelmäßig durch die Anbindung an ein ERP-System große Datenmengen hinzugefügt / verändert? Werden regelmäßig andere Tasks auf dem Shop-Server ausgeführt, die die Performance beeinträchtigen könnten? |
Die Standard-MySQL-Konfiguration vieler Distributionen ist nicht für den Produktivbetrieb optimiert. Das Script mysqltuner bietet Anhaltspunkte, welche Konfigurationsparameter noch nicht ideal sind.
wget http://mysqltuner.pl/ -O mysqltuner.pl
chmod +x mysqltuner.pl
./mysqltuner.pl
Standardmäßig verwendet Shopware 6 den Admin Worker. Dieser bearbeitet die Message Queue jedoch langsamer als der CLI Worker und erfordert zudem, dass die Administration über einen längeren Zeitraum geöffnet ist. Deshalb empfehlen wir diesen in zwei einfachen Schritten für Produktivsysteme zu deaktivieren.
Die folgenden Einstellungen erfolgen direkt auf dem Server. Da die Möglichkeiten der Serverkonfiguration vom Hoster abhängt, erläutern wir dies hier allgemein. Bei Fragen zur Bedienung der Serverkonfiguration sollte der Support Deines Hosters weiterhelfen können.
Um den Admin-Worker zu deaktivieren muss die Änderung in der Datei z-shopware.yaml vorgenommen werden. Du findest diese in Deiner Shopware-Installation unter config/packages/. Deaktiviere den Admin-Worker indem Du den Wert enable_admin_worker auf "false" setzt und speichere die Datei ab. Deine Datei sollte nun folgendermaßen aussehen:
# config/packages/z-shopware.yaml
shopware:
admin_worker:
enable_admin_worker: false
Damit die Message Queue und die Scheduled Tasks nun ausgeführt werden, müssen die Prozesse über die CLI gestartet werden.
Message Queue:
bin/console messenger:consume default --time-limit=60
Scheduled Tasks:
bin/console scheduled-task:run --time-limit=60
Wir empfehlen bei den oben stehenden Befehlen den Parameter time-limit=60, sodass der Befehl für maximal 60 Sekunden ausgeführt wird. Alternativ /zusätzlich kannst Du anstatt eines Zeitlimits auch ein Speicherlimit definieren, dies ist mit dem Parameter --memory-limit=512M möglich. Mehr Informationen findest Du in unserer Developer Dokumentation.
Wichtig ist bei diesem Vorgang, dass die Befehle regelmäßig (vzw. alle 60 Sekunden, siehe --time-limit) ausgeführt werden, damit die Message Queue kontinuierlich abgearbeitet wird. Dies kann zum Beispiel durch das Anlegen eines Cronjobs oder eines Services auf dem Server erreicht werden. Wende Dich hierzu an Deinen Hoster.
Den wohl größten Impact auf die Performance bietet der Einsatz der drei folgenden Technologien. Die Konfiguration und Wartung setzen jedoch Fachwissen voraus und wird eigentlich nur in sehr großen Systemen mit viel Traffic benötigt.
ElasticSearch bzw. OpenSearch ist eine Open-Source-Suchmaschine und Analyselösung, die speziell für die schnelle und skalierbare Suche und Analyse von großen Mengen unstrukturierter Daten entwickelt wurde.
Eine Anleitung zur Verwendung von ElasticSearch / OpenSearch findest Du in unserer Developer Dokumentation. Set up Elasticsearch - Shopware Developer
Shopware verwendet standardmäßig den in PHP konfigurierten Sitzungsspeicher. Bei den meisten Installationen ist dies das Dateisystem. Um die Belastung auf die Datenbank zu verringern bieten und schnellere Datenverarbeitung zu ermöglichen, ist die Verwendung von Redis empfehlenswert.
Eine Anleitung zur Verwendung von Redis findest Du in unserer Developer Dokumentation. Session - Shopware Developer
Flysystems ermöglichen es Dir Daten sicher, redundant und performant extern zu speichern. Dies kann Deinen eigenen Server weiter entlasten und dadurch eine bessere Performance bieten.
Eine Anleitung zur Verwendung von Flysystems findest Du in unserer Developer Dokumentation. Filesystem - Shopware Developer