Dlaczego checkout w Magento pokazuje biały ekran przy dużych koszykach (i jak to naprawić)?

27 września 2025 3 view(s)
Dlaczego checkout w Magento pokazuje biały ekran przy dużych koszykach (i jak to naprawić)?

Magento 2 – biały ekran w checkout (white screen of death) przy dużym koszyku

Wyobraź sobie klienta, który dodaje kilkadziesiąt produktów do koszyka… przechodzi do checkoutu… i zamiast kasy widzi biały ekran.
Brzmi znajomo? W Magento 2.4.x to nie jest rzadki problem – i właśnie przerobiliśmy go na żywym projekcie.

Objawy

  • Checkout działał poprawnie przy mniejszych koszykach.

  • Przy kilkudziesięciu produktach – biała strona.

  • W logach brak komunikatów oraz błędów.

  • Losowo checkout działał, a po chwili ten sam koszyk wywalał pustą stronę.

Trop numer 1 – Redis?

Pierwsze podejrzenia padły na Redis: locki sesji, concurrency, timeouty.

Po wyłączeniu Redis sesje faktycznie trochę się uspokoiły, ale problem wcale nie zniknął.

Trop numer 2 – shipping.phtml

ddd

Debugując krok po kroku doszliśmy do pliku:

vendor/magento/module-checkout/view/frontend/templates/cart/shipping.phtml

który ładował gigantyczny JSON:

window.checkoutConfig = {$serializedCheckoutConfig};

Źródło problemu – quoteItemData

Okazało się, że winowajcą jest linijka w DefaultConfigProvider:

$output['quoteItemData'] = $quoteItemData;

czyli wszystkie dane o produktach w koszyku. I w tym miejscu Magento ładowało między innymi custom_attributes_serializable, które potrafiło ważyć… setki MB.

Rozwiązanie

Najprostszy fix: wyciąć niepotrzebne dane zanim trafią do checkoutConfig.

Zrobiliśmy to pluginem na Quote\Item::setProduct():

public function afterSetProduct(
    \Magento\Quote\Model\Quote\Item $subject,
    $result,
    $product
) {
    // główny winowajca
    $subject->setData('custom_attributes_serializable', null);

    return $result;
}

Efekt?

  • Checkout zaczął działać stabilnie, nawet przy dużych koszykach.

  • Payload JSON spadł z kilku/kilkunastu MB do kilkuset KB.

Wnioski

  • W Magento 2 checkout potrafi być bardzo wrażliwy na to, co wpadnie do quoteItemData.

  • Jeśli macie problemy z białymi ekranami w koszyku/checkout – sprawdźcie rozmiar custom_attributes_serializable.

  • Czasem wystarczy jeden mały plugin, żeby uratować stabilność całego sklepu.

Mieliście podobne przygody z checkoutem? Jakie inne dziwne przypadki rozwalały Wam koszyk w Magento? Podzielcie się w komentarzach

Previous article:
Next article:
Komentarze
Leave your comment
Your email address will not be published
Powered by Amasty Magento 2 Blog Extension