Cómo solucionar la carga lenta a causa de wc-ajax=get_refreshed_fragments de WooCommerce

WooCommerce es sin duda el plugin más popular para hacer tiendas online con WordPress. Actualmente la inmensa mayoría de Ecommerce en WordPress usan WooCommerce, y en este blog me gusta compartir maneras de mejorarlo, o solucionar problemas, como es el caso de hoy.

Hace poco en el Ecommerce de un cliente, tras realizarle una prueba de rendimiento y velocidad, descubrí que había algo llamado wc-ajax=get_refreshed_fragments que tardaba más de un segundo en cargar.

Tras analizarlo más en conciencia me sorprendió ver que en la mayoría de las ocasiones era incluso peor, llegando a tardar en cargar entre 5 y 10 segundos, algo inaceptable en una tienda online.

Y tras mucho buscar, como siempre, aprendí bastante sobre este complemento de WooCommerce y de cómo arreglar el problema de los excesivos tiempos de carga del mismo. ¿Lo vemos?

¿Qué es wc-ajax=get_refreshed_fragments?

Tengo que reconocer que me costó bastante entender esto de los fragmentos actualizados invocados por WooCommerce y, como mis webs están alojadas en SiteGround, el impacto era menor que en otros sitios de clientes, pues en mis Ecommerce solo provocaba un retardo alrededor de un segundo.

Y no es que no sea nada, que 1 segundo de retraso por una sola llamada es para tenerla en cuenta, pero no es lo mismo si usas un hosting con suficientes recursos y optimizaciones que si estás en un alojamiento de amplio espectro (siendo generoso), donde los tiempos de carga subían desde 3 hasta 10 o más segundos.

Básicamente, lo que pasa es que WooCommerce trata de recopilar los detalles del carrito de compra llamando al script, y le lleva mucho tiempo realizar esta tarea.

WooCommerce extrae los detalles del carrito sin caché en cada página para mostrar los últimos elementos del carrito haciendo una llamada a Admin Ajax.

Podrás ver el script más o menos como en el código siguiente en cada página de tu sitio:

Llamadas a Admin Ajax y carga de página

WooCommerce utiliza la llamada Admin Ajax de fragmentación del carrito para actualizar los elementos y el total del carrito sin que tengas que recargar la página.

Pero las llamadas a Admin Ajax en cada página retrasan los tiempos de carga de página de manera considerable, además de consumir enormes recursos del servidor.

El otro problema es que WooCommerce hace esto en cada página, aunque no haya carrito o detalles de productos. Debido a esto se ralentiza la carga en todas las páginas de tu web, aunque no tengan nada relacionado con la tienda online.

Así que no sirve de nada quitar el carrito de una página, los tiempos de carga seguirán igual de mal. Lo que hay que hacer es desactivar la actualización del carrito cuando no hay carrito o no se muestran productos.

¿Vemos como hacerlo?

Cómo solucionar el problema con wc-ajax=get_refreshed_fragments?

El problema se soluciona sacando el script de la cola (de-enqueuing) en el archivo functions.php de tu tema hijo o en tu plugin de utilidades.

Hay tres opciones para sacar de la cola el script de fragmentación del carrito del Ajax de WooCommerce:

  • Desactivar la fragmentación del carrito solo en la portada de tu sitio
  • Desactivar la fragmentación del carrito en la portada y en las entradas
  • Desactivar todos los estilos y scripts de WooCommerce en todas las páginas excepto en las que sean estrictamente de la tienda

Veamos las tres opciones en detalle, pero aplica solo una de ellas, la que mejor se adapte a tu sitio.

Desactivar la fragmentación del carrito solo en la portada de tu sitio

Desde tu cliente FTP favorito o en el panel de tu hosting localiza el archivo functions.php del tema hijo o tu plugin de utilidades y añade este código al final del archivo:

Cuando guardes los cambios en el archivo ve a WooCommerce > Ajustes > Productos > General, activa la casilla “Redirigir a la página del carrito tras añadir productos con éxito” y desactiva la de “Activar botones AJAX de añadir al carrito en los archivos”.

Esto ayudará a tus clientes a ir a la página del carrito en vez de tener que esperar un montón de tiempo una vez añada un producto al carrito.

De lo contrario, aunque añada un producto, puede que tu carrito no muestre los detalles, al estar en la misma página en la que se ha desactivado el script de fragmentación.

Desactivar la fragmentación del carrito en la portada y en las entradas

El código anterior desactivaba el script de fragmentación del carrito solo en la portada. Si quieres desactivarlo también en todas las entradas entonces usa este otro código:

Desactivar todos los estilos y scripts de WooCommerce en todo el sitio

WooCommerce es un plugin que consume muchos recursos del servidor, pues tiene que cargar un montón de hojas de estilos y scripts.

Si tienes pocos productos pero cientos de publicaciones en el blog, varias páginas y más contenidos, entonces tiene todo el sentido desactivar todo lo que tenga que ver con WooCommerce en todas las partes de tu sitio que no tengan nada relacionado con la tienda online.

De este modo ayudarás a que todas esas entradas y páginas de tu sitio, incluida la portada, carguen mucho más rápido.

Para este cometido tienes el siguiente código:

Lo primero que hace el código es comprobar si tienes activo el plugin WooCommerce y luego desactiva scripts y estilos en todas las páginas excepto en las de productos, carrito y pago.

¿No hay un plugin que haga lo mismo?

Vale, sí, lo hay, pero más limitado.

Si no te sientes cómodo editando archivos y añadiendo códigos puedes instalar y activar el plugin Disable Cart Fragments.

No hay en principio nada que configurar si lo que quieres es el tercer método, el que desactiva los estilos y scripts de WooCommerce en todas las partes que no tengan algo de tienda.

Ahora bien, si lo prefieres, puedes añadir una constante en el archivo wp-config.php, para indicar en qué entradas o páginas (mediante sus ID) no quieres que se carguen estilos y scripts, así:

Ah, y recuerda cambiar los ajustes de comportamiento al añadir productos al carrito en los ajustes de WooCommerce como vimos antes.

¿Se pueden reducir aún más las llamadas Ajax?

Pues sí, y es algo que no he comentado nunca. Resulta que todas esas cajas del escritorio de WordPress que muestran estadísticas de venta, valoraciones y demás usan llamadas Ajax para mostrar el contenido dinámicamente, igual que hace la fragmentación del carrito.

La solución a esto es reducir las consultas o desactivar la Heartbeat API, bien con mi plugin WPO Tweaks o con este truco que ya publiqué hace tiempo.

Reducirás el consumo de recursos de tu servidor y mejorarán los tiempos de carga de tu sitio.

Revisa, comprueba, analiza

No se te olvide, tras cada modificación, comprobar en tu herramienta de optimización o velocidad favorita los tiempos de carga, para comprobar si mejoran.

Valora este artículo para mejorar la calidad del blog ...

Al hacer una valoración se recoge una cookie con la IP de tu dispositivo

FlojitoNo está malEstá bienMe ha servidoFantástico (6 votos, promedio: 5,00 de 5)
Cargando…

Autor: Fernando Tellado

Fernando Tellado, apasionado de WordPress, profesor, consultor y ponente. Maquero cansino, padre de tres hijos y de una perrita Beagle, Bilbaíno de nacimiento, Español de corazón y ciudadano de donde me quieran. Autor del libro WordPress - La tela de la araña. Mi blog personal es Navegando con red, donde he crecido como escritor en la red y ofrezco mis visiones acerca de la Web 2.0 y la blogosfera.

Comparte esta entrada en
468 ad

Pin It on Pinterest