Salta al contingut
WooRescueHQ

WooCommerce / Rendiment

Checkout lent a WooCommerce: què cal revisar

Resposta curta

El checkout no es pot desar en memòria cau, així que la seva velocitat depèn del que s’executa durant les seves peticions. Mesura les peticions update_order_review i checkout (o les crides a la Store API amb el bloc de Checkout) i esbrina on se’n va el temps: crides externes (enviaments, impostos, antifrau, ERP), consultes lentes, feina feta en crear la comanda com enviar correus, o l’espera d’un procés PHP lliure. Arregla la part costosa: un plugin de memòria cau no hi ajudarà.

Símptomes

  • Diversos segons entre prémer Fes la comanda i la pàgina d’agraïment o de pagament.
  • El resum de la comanda es queda carregant cada vegada que el client canvia l’adreça, el mètode d’enviament o la quantitat.
  • El checkout va ràpid de nit i lent a les hores de més trànsit.
  • Errors 502 o 504 ocasionals al checkout amb càrrega.

Causes més habituals

  1. Crides externes durant el checkout: tarifes d’enviament en temps real, serveis de càlcul d’impostos, validació d’adreces, puntuació antifrau, consultes d’estoc a l’ERP, comprovacions de llicència.
  2. Feina feta en crear la comanda: correus transaccionals enviats per un servidor de correu lent, enviaments síncrons al CRM o a l’ERP, generació de factures en PDF.
  3. Consultes lentes a la base de dades: taules de meta enormes, una taula de sessions gran, consultes a mida sense índexs i cap memòria cau d’objectes persistent.
  4. Massa actualitzacions: cada canvi de camp dispara una actualització del resum de la comanda que torna a executar tot l’anterior.
  5. Processos PHP esgotats: les peticions lentes ocupen el pool de PHP-FPM i les noves peticions del checkout esperen a la cua.

Diagnosi

1. Mesura les peticions correctes

Obre el panell de xarxa i recorre un checkout. Anota el temps fins al primer byte (TTFB) de:

  • ?wc-ajax=update_order_review (checkout clàssic, a cada actualització)
  • ?wc-ajax=checkout (checkout clàssic, Fes la comanda)
  • /wp-json/wc/store/v1/cart/... i /wp-json/wc/store/v1/checkout (bloc de Checkout)

Un update_order_review lent apunta a enviaments, impostos i totals; un checkout lent apunta a la creació de la comanda, al pagament i a tot el que s’hi enganxa.

2. Desglossa el temps a staging

En una còpia de staging amb dades semblants a les de producció, fes servir Query Monitor per veure, a la petició lenta, les consultes a la base de dades (les més lentes i les duplicades), les crides a l’HTTP API amb la seva durada i els hooks que s’executen. Les crides externes solen destacar de seguida.

3. Troba les peticions lentes a producció

Activa el slow log de PHP-FPM (request_slowlog_timeout, per exemple 5 segons). Per a cada petició que el superi, PHP-FPM escriu la traça del punt on el codi esperava: sovint un curl_exec() dins d’un plugin d’enviaments o de l’ERP.

4. Revisa la part de la base de dades

Mira el slow query log, la mida de la taula de sessions, les opcions amb càrrega automàtica i si hi ha una memòria cau d’objectes persistent (Redis o Memcached) activa i realment utilitzada.

Registres i comprovacions tècniques

  • Temps del panell de xarxa per a les peticions del checkout.
  • Query Monitor a staging: consultes, crides a l’HTTP API, hooks.
  • Slow log i pàgina d’estat de PHP-FPM.
  • Slow query log de MySQL.
  • Registres de correu o del plugin SMTP per buscar enviaments lents en el moment de la comanda.
  • Eines → Accions programades per a la feina en segon pla que es queda enrere.

Solucions

  • Desa en memòria cau o redueix les crides externes: desa les respostes de transportistes i impostos quan les seves condicions ho permetin, afegeix timeouts i evita cridar serveis a cada canvi de camp.
  • Treu feina de la petició de la comanda: porta les sincronitzacions amb ERP i CRM a Action Scheduler; difereix els correus transaccionals o envia’ls per un relay ràpid.
  • Afegeix una memòria cau d’objectes persistent i assegura’t que les dades del checkout no es buiden a cada petició.
  • Arregla les consultes lentes: índexs per a les cerques a mida, neteja de sessions caducades i d’opcions amb càrrega automàtica massa grans.
  • Dimensiona PHP-FPM per al trànsit real, segons la memòria per procés i la concurrència als pics.
PHPmu-plugins/defer-emails.php
// Envia els correus transaccionals de WooCommerce després de la resposta, no durant el checkout.
add_filter( 'woocommerce_defer_transactional_emails', '__return_true' );

Què no s’ha de fer

  • No desis el checkout ni el carretó en memòria cau perquè «vagin ràpid»: trenca sessions, nonces i totals.
  • No instal·lis un segon plugin de memòria cau: no s’aplica al checkout.
  • No treguis plugins d’enviaments o d’impostos sense revisar les regles de negoci que apliquen.
  • No canviïs de hosting abans de mesurar on se’n va el temps.

Quan recórrer a un expert

Recorre a un enginyer quan la part lenta és dins d’un plugin o de codi a mida que no pots canviar amb seguretat, quan la lentitud només apareix amb trànsit real, o quan comencen a aparèixer errors al checkout (502/504) a les hores punta.

Preguntes freqüents

Per què el checkout de WooCommerce és lent i la resta del web va ràpid?

La resta del web sol servir-se des d’una memòria cau de pàgines. Les pàgines de carretó, checkout i compte no s’han de desar en memòria cau, així que cada petició executa PHP, consultes i qualsevol crida externa enganxada al checkout.

Les tarifes d’enviament en temps real alenteixen el checkout?

Poden fer-ho. Les tarifes en temps real criden l’API del transportista quan canvia l’adreça o el carretó. WooCommerce desa en memòria cau les tarifes calculades per paquet durant la sessió, però una API lenta, o un plugin que se salta aquesta memòria cau, suma el seu temps de resposta a cada actualització.

Enviar els correus de la comanda alenteix el checkout?

Pot fer-ho, quan els correus s’envien dins de la petició de la comanda i el servidor de correu és lent. Diferir els correus transaccionals, o enviar-los mitjançant un relay local ràpid o una API, treu aquest temps de l’espera del client.

Més recursos de servidor arreglen un checkout lent?

Només si el servidor és el coll d’ampolla. Si el temps es perd esperant una API externa o en una sola consulta lenta, un servidor més gran no canvia res.

$ descriu el problema

Tens un problema amb WooCommerce?Sol·licita una diagnosi.

Explica'ns què falla, què ha canviat darrerament i com afecta el negoci. Revisem cada sol·licitud i et recomanem el pas següent.

Sol·licitar una diagnosi Veure serveis i preus

No enviïs mai contrasenyes, claus d'API ni dades de targetes a través del formulari.

Diagnosi des de299 €

Sol·licitar una diagnosi