Magento 2 – écran blanc au checkout (white screen of death) avec un grand panier
Imaginez un client qui ajoute plusieurs dizaines de produits à son panier… passe au checkout… et, au lieu de la page de paiement, voit un écran blanc.
Cela vous semble familier ? Dans Magento 2.4.x, ce problème n’est pas rare – et nous venons justement de le traiter sur un projet réel.
Symptômes
Le checkout fonctionnait correctement avec des paniers plus petits.
Avec plusieurs dizaines de produits – page blanche.
Aucun message ni erreur dans les logs.
De façon aléatoire, le checkout fonctionnait, puis, quelques instants plus tard, le même panier affichait une page vide.
Piste n° 1 – Redis ?
Les premiers soupçons se sont portés sur Redis : verrous de session, concurrence, timeouts.
Après la désactivation de Redis, les sessions se sont effectivement un peu stabilisées, mais le problème n’a absolument pas disparu.
Piste n° 2 – shipping.phtml
ddd
En déboguant pas à pas, nous sommes arrivés au fichier :
vendor/magento/module-checkout/view/frontend/templates/cart/shipping.phtml
qui chargeait un JSON gigantesque :
window.checkoutConfig = {$serializedCheckoutConfig};Source du problème – quoteItemData
Il s’est avéré que le coupable était cette ligne dans DefaultConfigProvider :
$output['quoteItemData'] = $quoteItemData;
c’est-à-dire toutes les données relatives aux produits dans le panier. Et à cet endroit, Magento chargeait notamment custom_attributes_serializable, qui pouvait peser… des centaines de MB.
Solution
Le correctif le plus simple : supprimer les données inutiles avant qu’elles n’arrivent dans checkoutConfig.
Nous l’avons fait avec un plugin sur QuoteItem::setProduct() :
public function afterSetProduct( MagentoQuoteModelQuoteItem $subject, $result, $product) { // główny winowajca $subject->setData('custom_attributes_serializable', null); return $result;}Résultat ?
Le checkout a commencé à fonctionner de manière stable, même avec de grands paniers.
La charge utile JSON est passée de plusieurs MB, voire d’une dizaine de MB, à quelques centaines de KB.
Conclusions
Dans Magento 2, le checkout peut être très sensible à ce qui arrive dans quoteItemData.
Si vous rencontrez des problèmes d’écrans blancs dans le panier/checkout, vérifiez la taille de custom_attributes_serializable.
Parfois, un petit plugin suffit à sauver la stabilité de toute la boutique.
Avez-vous déjà vécu des situations similaires avec le checkout ? Quels autres cas étranges ont déjà fait planter votre panier dans Magento ? Partagez-les en commentaire