2022

Shopware 6 langsam – so optimierst du Deinen Shopware-Shop
Frisch installiert, voller Tatendrang und das Backend ist nur halb so motiviert wie du?
Als Shopware 6 Agentur kennen wir die Probleme im Tagesgeschäft mit langsamen Backends nur zu gut. Ebenfalls vererben sich diese auf die Performance in deinem Frontend und mitunter auch auf den Google Page-Speed-Index.
Daher wollen wir hier mit Dir unsere Erfahrungen teilen und eine Checkliste erstellen, die stetig für Shopware 6 erweitert wird.
Grundlegende Server-Einstellungen für Shopware 6
Nginx ist im Regelfall deutlich schneller als Apache2 und kann auch mehr Anfragen / Besucher parallel begrüßen. Hoster wie wir oder auch Timme Hosting, sowie Schaal IT setzen für die Shopware-Lösungen auf Nginx und fahren damit sehr gut. Wer einen Provider nutzt mit Plesk als Verwaltungsoberfläche kann meist zwischen beiden wechseln und sollte in einer Testumgebung einfach mal das ganze benchmarken.
PHP-Version und Einstellungen für Shopware 6
PHP 8 ist Pflicht und sollte unbedingt genutzt werden. Wer mit PHP 7.4 arbeitet, muss mit der Konsequenz der deutlich schlechtere Ladezeiten leben.
Sollte Dein Shop nicht mit PHP 8 laufen, solltest du eine Kopie in einer Testversion machen und prüfen, welche Plugins hier querschießen und schauen, ob du eine Alternative findest.
PHP Konfiguration im Detail
Mit folgenden Einstellungen in der PHP.ini haben wir in einem normalen Shop mit 5-15 Plugins und 2 – 3.000 Artikel die beste Performance erzielen können:
post_max_size = 100M
upload_max_filesize = 100M
max_execution_time = 1200
max_input_time = 1200
magic_quotes_gpc = Off
file_uploads = Yes
max_file_uploads = 20
short_open_tag = On
phar.readonly = off
session.auto_start = off
suhosin.session.cryptua = off
zend.ze1_compatibility_mode = off
max_input_vars = 6000
display_errors = Off
log_errors = On
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
memory_limit = 2048M
upload_max_filesize = 64M
post_max_size = 128M
opcache.enable=1
opcache.memory_consumption=1024
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=15000
opcache.revalidate_freq=0
opcache.fast_shutdown=1
opcache.enable_cli=1
allow_url_fopen=1
max_execution_time = 3600
(Rot = besonders wichtig, benötigt aber auch ausreichend Server-Leistung)
opcache.revalidate_freq=0 FÜR DEN LIVE-Betrieb bitte!
Außerdem solltet ihr euch mit eurem Provider in Verdingung setzen und die Datenbank zusätzlich über Redis laufen lassen. Ladezeiten im Backend sollten von nun an im Backend schon einmal ein Fremdwort sein. Sollte euer Shop weiterhin träge bleiben, gilt es, die Umgebung zu durchleuchten. Nutzt ihr Shared Hosting für 15 -30 €, ist die Hardware vermutlich einfach überlaufen. Eure Umgebung sollte 4 CPU Kerne oder mehr haben. Ebenfalls sind wir keine Fans von Virtualisierungen, sondern empfehlen spätestens bei einem täglichen Umsatz von 5 – 10.000 € ein dediziertes Hosting, damit euch die Hardware-Leistung allein gehört.
Shopware 6 Cronjobs anlegen
Shopware benötigt mehrere Cronjobs, um sauber zu laufen.
- Scheduled Task (damit das System so läuft, wie es soll) – Mind. alle 2 Stunden!
- Cache leeren – Shopware 6 leert den kompletten Cache nicht von allein. Daher wird das System immer größer – Wir empfehlen das Leeren einmal wöchentlich z. B. mittwochmorgens um 3.00 Uhr. (Siehe auch Showpare 6 Doku -> Cache automatisch leeren)
Achtet darauf, dass eure Cronjobs Timeout Limits haben. Andernfalls können die Cronjobs ewig laufen und ihr müllt euch das System zu. Die Konfiguration und das Einrichten ist abhängig vom jeweiligen Hoster.
Wichtig ist, das ihr ein memory-limit (z. B. 2048 MB) setzen könnt und ein time-limit (z. B. 7080 sec.).
Shopware 6 Frontend-Performance optimieren
Nach der grundlegenden Optimierung der Hosting-Umgebung erfolgt jetzt die Optimierung im Frontend.
Auf Basics wie Bilder optimieren gehen wir jetzt nicht im Detail ein. Dennoch solltest Du dies im Auge behalten, weil die richtige Datengröße wichtig ist. Interessanter ist hier jedoch der Part, ob Du die Bilder bereits in einem CDN auslagerst. Hierzu bieten sich entweder Dienste an wie Kraken oder Cloudflare, wobei Cloudflare durchaus interessanter ist, was die Gesamtheit der Optimierung angeht (Es gibt natürlich auch noch andere Plugins, die hier Shopware 6 supporten können). Da man aber den wenigsten Aufwand und das beste Ergebnis mit Cloudflare hat, empfehlen wir Dir die Einrichtung des grundsätzlich kostenlosen Dienstes.
Die Vorteile der kostenlosen Version sind bereits:
- Erweitertes Caching außerhalb Eures Servers wodurch Daten schneller bereitgestellt werden
- HTTP 3 Support
- gzip
- Kompilieren und Zusammenfügen von CSS und JS-Dateien
- DNS-Caching
- Anonymisieren Eures Servers
- und diversen weitere Tools
Kurz: Ihr müsst hier nur eure Domain via Namensserver eintragen und dann die Records von dort verwalten. Die Domain selbst bleib bei eurem Provider in der Verwaltung. Dadurch wird Euer Server zusätzlich entlastet und Anfragen werden aus dem DNS-Cache geworfen, wodurch die Antwortzeiten weiter verkürzt werden.
Wer es sich hier einfach machen will, bucht dann die Pro-Version für ca. 20 € mtl. und profitiert von weiteren Optimierungen sowie dem Konvertieren der Bild in webP in einer verlustfreien Qualität oder wahlweise in einer Verlustbehafteten. WebP ist der aktuelle Standard was Bilderoptimierung für Browser angeht und zeigen somit die optimale Version eurer Bilder an. Dank Cloudflare muss hier nichts von Hand umgewandelt werden – Dies passiert automatisch. Eure Bilder selber bleiben im Shopware-Shop im Original vorhanden.
Lazy-Loading für deinen Shopware Shop
Mit Lazy-Loading werden Bilder nachgeladen und euer Shop muss initial weniger Daten laden, um das Frontend zu laden.
Hier freut sich nicht nur der Besucher, sondern auch der Google-Page-Speed-Index.
Achtet aber darauf, wie sich das mit anderen Tools verhält. Bei unserem Test haben wir gemerkt, dass das direkte Ausspielen über Cloudflare ohne Lazy-Load das bessere Ergebnis liefert. Dies ist aber von Projekt zu Projekt unterschiedlich!
Bitte bedenkt, dass es sich hier um Empfehlungen unsererseits handelt und wir bei Problemen o.ä. natürlich keine Haftung übernehmen können.
Weitere Schritte folgen hier nach und nach.