Warum zeigt der Checkout in Magento bei großen Warenkörben einen weißen Bildschirm (und wie lässt sich das beheben)?
Magento 2 – weißer Bildschirm im Checkout (White Screen of Death) bei großem Warenkorb
Stell dir vor, ein Kunde legt mehrere Dutzend Produkte in den Warenkorb… geht zum Checkout… und sieht statt der Kasse einen weißen Bildschirm.
Kommt dir das bekannt vor? In Magento 2.4.x ist das kein seltenes Problem – und genau diesen Fall haben wir gerade in einem Live-Projekt durchgespielt.
Symptome
Der Checkout funktionierte bei kleineren Warenkörben korrekt.
Bei mehreren Dutzend Produkten – weiße Seite.
In den Logs gab es keine Meldungen oder Fehler.
Zufällig funktionierte der Checkout, und kurz darauf zeigte derselbe Warenkorb eine leere Seite.
Spur Nummer 1 – Redis?
Der erste Verdacht fiel auf Redis: Session-Locks, Concurrency, Timeouts.
Nach dem Deaktivieren von Redis beruhigten sich die Sessions tatsächlich etwas, aber das Problem verschwand keineswegs.
Spur Nummer 2 – shipping.phtml
ddd
Beim Debugging Schritt für Schritt kamen wir zu dieser Datei:
vendor/magento/module-checkout/view/frontend/templates/cart/shipping.phtml
die ein riesiges JSON lud:
window.checkoutConfig = {$serializedCheckoutConfig};Ursache des Problems – quoteItemData
Es stellte sich heraus, dass die folgende Zeile in DefaultConfigProvider der Übeltäter war:
$output['quoteItemData'] = $quoteItemData;
also alle Daten zu den Produkten im Warenkorb. An dieser Stelle lud Magento unter anderem custom_attributes_serializable, das mehrere Hundert MB groß sein konnte.
Lösung
Der einfachste Fix: unnötige Daten entfernen, bevor sie in checkoutConfig landen.
Das haben wir mit einem Plugin auf QuoteItem::setProduct() umgesetzt:
public function afterSetProduct( MagentoQuoteModelQuoteItem $subject, $result, $product) { // główny winowajca $subject->setData('custom_attributes_serializable', null); return $result;}Das Ergebnis?
Der Checkout begann stabil zu funktionieren, auch bei großen Warenkörben.
Die JSON-Payload sank von einigen/mehreren MB auf ein paar Hundert KB.
Fazit
In Magento 2 kann der Checkout sehr empfindlich darauf reagieren, was in quoteItemData landet.
Wenn ihr Probleme mit weißen Bildschirmen im Warenkorb/Checkout habt, prüft die Größe von custom_attributes_serializable.
Manchmal reicht ein kleines Plugin, um die Stabilität des gesamten Shops zu retten.
Hattet ihr ähnliche Erlebnisse mit dem Checkout? Welche anderen seltsamen Fälle haben euch den Warenkorb in Magento zerschossen? Teilt es in den Kommentaren
