Free cookie consent management tool by TermsFeedAktualizacja preferencji plików cookie

¿Por qué el checkout en Magento muestra una pantalla blanca con carritos grandes (y cómo solucionarlo)?

2 min de lectura 0 visualizaciones
Imagina a un cliente que añade varias decenas de productos al carrito… pasa al checkout… y, en lugar de la caja, ve una pantalla blanca. ¿Te suena? En Magento 2.4.x no es un problema raro, y acabamos de resolverlo en un proyecto real.

Magento 2: pantalla blanca en el checkout (white screen of death) con un carrito grande

Imagina a un cliente que añade varias decenas de productos al carrito… pasa al checkout… y, en lugar de la caja, ve una pantalla blanca.
¿Te suena? En Magento 2.4.x no es un problema raro, y acabamos de resolverlo en un proyecto real.

Síntomas

  • El checkout funcionaba correctamente con carritos más pequeños.

  • Con varias decenas de productos: página en blanco.

  • En los logs no había mensajes ni errores.

  • De forma aleatoria, el checkout funcionaba y, un momento después, el mismo carrito mostraba una página vacía.

Pista número 1: ¿Redis?

Las primeras sospechas recayeron en Redis: bloqueos de sesión, concurrencia, timeouts.

Tras desactivar Redis, las sesiones se estabilizaron algo, pero el problema no desapareció en absoluto.

Pista número 2: shipping.phtml

ddd

Depurando paso a paso llegamos al archivo:

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

que cargaba un JSON gigantesco:

window.checkoutConfig = {$serializedCheckoutConfig};

Origen del problema: quoteItemData

Resultó que el culpable era una línea en DefaultConfigProvider:

$output['quoteItemData'] = $quoteItemData;

es decir, todos los datos de los productos del carrito. Y en ese punto Magento cargaba, entre otros, custom_attributes_serializable, que podía llegar a pesar… cientos de MB.

Solución

El fix más sencillo: eliminar los datos innecesarios antes de que lleguen a checkoutConfig.

Lo hicimos con un plugin sobre QuoteItem::setProduct():

public function afterSetProduct( MagentoQuoteModelQuoteItem $subject, $result, $product) { // główny winowajca $subject->setData('custom_attributes_serializable', null); return $result;}

¿El resultado?

  • El checkout empezó a funcionar de forma estable, incluso con carritos grandes.

  • El payload JSON bajó de varios MB o más de diez MB a unos cientos de KB.

Conclusiones

  • En Magento 2, el checkout puede ser muy sensible a lo que entra en quoteItemData.

  • Si tenéis problemas con pantallas blancas en el carrito/checkout, comprobad el tamaño de custom_attributes_serializable.

  • A veces basta con un pequeño plugin para salvar la estabilidad de toda la tienda.

¿Habéis tenido experiencias similares con el checkout? ¿Qué otros casos extraños os han roto el carrito en Magento? Compartidlo en los comentarios

Productos