Erfolgreiche Performanceoptimierung einer Shopware 6 Migration

Von mehr als

Sekunden Ladezeit

Zu Pagespeed von

ms

Situation

Eine Migrationsumgebung in Version 6.5.7.1 mit ohnehin schon bemerkbar schlechtem Pagespeed wurde auf die Shopware Version 6.6.8.2 aktualisiert.
Die Situation im Anschluss war ein sehr langsamer Shop mit einer Ladezeit von >10 Sekunden. Dieses Problem galt es nun zu lösen.

 Erstes Troubleshooting

Der Ursprung zeigte sich in den Dev Tools im Aufruf von widgets/checkout/info, dies ist der Startpunkt für eine ganze Reihe von Prozessen. Erster Anhaltspunkt waren search-widget.plugin und cart-widget.plugin js, beide verursachten wechselseitig (was interessant ist) einen Delay im Ladeprozess von bis zu über 10 Sekunden.

Mögliche Ursachen

Prinzipielle Ursachen können hier im Request an den Symfony Router, auf Controller Ebene, auf Service Layer Ebene, in Berechnungsroutinen
der Skripte, in Datenbankoperationen, Caching, Template Rendering, Theme, Plugins aber auch am Server liegen.

Der Shop hat einen bereits gesetzten Go Live Termin für die Migration, von daher spielt der Faktor Zeit bereits eine bedeutendere Rolle. Das Problem ist für
eine reibungslose Migration schnellstens in den Griff zu bekommen.

Aufgrund der Komplexität der möglichen Ursachen basiert die Herangehensweise auf einem schrittweisen Ausschlussverfahren.

Schrittweises Troubleshooting

Schicht für Schicht wurde sich auf die Fehlersuche begeben, als erstes wurde sichergestellt dass Plugins und Theme keinen Einfluss auf dieses
Verhalten haben. Da Domain und Hosting getrennt arbeiten, musste auch hier ein möglicher Einfluss ausgeschlossen werden.

 

Individuelle Lösungen

JS, Dateien – Ordner und Hosting

Die augenscheinlich ursächlichen JS wurden analysiert und mit den Originalversionen verglichen, es konnten keine Unterscheide festgestellt werden. Auch die Dateirechte der in Verbindung stehenden Dateien/Ordner kamen als möglicher Grund in Frage, konnten aber schnell ausgeschlossen werden. Zwischenzeitlich wurde auch in enger Abstimmung mit dem Hoster das Thema vServer durchleuchtet, auch an dieser Stelle gab es eine Entwarnung.

Shopware Core

Im Anschluss wurden die stattfindenden Requests, Controller, Service Layer untersucht ohne einen Lsöungshinweis zu liefern. Der Shop generierte
immer noch ein Delay von nun 5 Sekunden. Nach jeder Änderung der Plugins, Cache Aktualisierung oder Template Kompilierung wies der Shop einmalig
eine Ladezeit von bis zu über einer Minute auf. Das war die initiale Reaktion, die weiteren Aufrufe waren zwar mit ~5s sehr viel schneller für
einen flüssig laufenden Shop aber immer noch eklatant zu langsam.

"

Der Weg über die Datenbank

Der nächste Schritt war einen Blick auf die Datenbank zu werfen, welche trotz der grossen Grösse eine respektable Performance zeigt und von daher
als Flaschenhals ausgeschlossen werden kann. Durch weitere Untersuchungen tauchten dann die Regeln in Verbindung mit der Migration als Verdächtige
auf. Der Abgleich der Informationen des Profilers mit dem Status im Shop zeigte ein vollständig anderes Bild.

Führte zu den Regeln

Keine einzige im Profiler aufgerufene Regel wurde trotz korrekt gemeldeter Migration aus SW5 im Backend des Migrationsshops angezeigt.
Das war nun eine konkrete Spur die auf eine mögliche Ursache der sehr langen Ladezeitverzögerung hinweist.

Aufgrund dieser gefundenen Diskrepanz konnte festgestellt werden, dass die Regeln zwar aufgerufen wurden aber nicht aufrufbar gewesen sind.
Von daher gingen die Aufrufe der Regeln ins Leere was die Ursache für das Delay gewesen ist. Aufgrund der getrennten Ebenen hatte dies allerdings
keinen Effekt auf den des Aufrufs /Widget/checkout/info zurückgegebenem Wert. Dieser ist in ordnungsgemäß schnell arbeitenden Shops und dem
Referenzshop identisch 204. 

Ein detaillierter Blick in die Datenbank und den mit den Regeln in Verbindung stehenden Tabellen hat Inkonsistenzen mit der rules Tabelle gezeigt.

Lösungsansatz:

Löschen der Regeln in der Datenbank um eine klare Basis zur Befüllung zu schaffen. Im zweiten Schritt wiederholter Durchlauf des
Migrationsassistenten mit Fokussierung auf den Import der die Regeln betreffenden Daten.

Ergebnis

Die Geschwindigkeit zeigte ab da mit ca 300ms entsprechend realistische und intakte Werte.

Das Problem des langsamen Shops war damit gelöst.