Sitio web

Cómo reducir el TBT en tu sitio web con carga diferida de JavaScript (Defer/Async)

  • 16 minutos para leer
  • Equipo de Hostragons
Cómo reducir el TBT en tu sitio web con carga diferida de JavaScript (Defer/Async)

La carga diferida de JavaScript es una técnica que mejora el tiempo total de bloqueo (Total Blocking Time o TBT) al posponer la ejecución de archivos JavaScript que bloquean el renderizado del navegador, aplicándolos en el orden correcto. En resumen, añadiendo atributos defer o async a los scripts no críticos, se reduce la carga del hilo principal, permitiendo que el usuario vea el contenido más rápido, interactúe antes y mejore las métricas de Core Web Vitals. Para implementar esta técnica en tu sitio, primero identifica qué archivos son críticos, luego aplica defer para scripts con dependencias y async para scripts de terceros independientes, y finalmente mide el impacto con herramientas como PageSpeed Insights, Lighthouse y Chrome DevTools.

En sitios web modernos, los problemas de rendimiento suelen deberse más al uso indiscriminado de JavaScript que a las imágenes. Por ejemplo, en una tienda online, si se cargan simultáneamente filtros de productos, chat en vivo, píxeles de publicidad, códigos de analítica, plugins de comentarios, herramientas de test A/B y scripts del tema, el hilo principal del navegador se mantiene ocupado por mucho tiempo. Este fenómeno es especialmente notorio en dispositivos móviles. Aunque el usuario vea el título en pantalla, al tocar el menú puede no recibir respuesta inmediata; en los informes de Lighthouse, el TBT aparece elevado.

En esta guía explicaremos qué son los atributos defer y async, cuándo utilizarlos, cómo aplicarlos en proyectos WordPress y desarrollos personalizados, qué aspectos medir y qué mejoras reales esperar en el TBT. Las recomendaciones para sitios alojados en la infraestructura de Hostragons se basan en estándares web actuales e incluyen cómo un hosting adecuado, CDN, SSL y caché pueden respaldar la optimización de JavaScript. Paquetes de hosting web Hostragons

¿Qué es el TBT y por qué está tan ligado a JavaScript?

El TBT, o Total Blocking Time, mide el tiempo en que el hilo principal del navegador está bloqueado y no puede responder a la interacción del usuario desde que aparece el primer contenido hasta que la página está completamente interactiva. En pruebas de laboratorio con Lighthouse, el TBT aumenta cuando hay muchas tareas largas (más de 50 ms) entre el First Contentful Paint y el Time to Interactive. Por ejemplo, si una tarea de JavaScript dura 180 ms, aportará 130 ms al TBT, dado que solo el tiempo que excede los 50 ms se considera bloqueo.

Esta métrica es crucial para la experiencia de usuario, porque si el navegador está ejecutando JavaScript cuando el usuario intenta interactuar con el menú, el botón de agregar al carrito o el buscador, la respuesta se retrasa. El usuario percibe esto como una congelación, lentitud o mal funcionamiento. Aunque Google no reduzca la experiencia de página a un solo puntaje en sus estándares SEO 2026, los sitios que ofrecen una interacción rápida y estable tienen ventaja en satisfacción y conversiones.

Síntomas comunes de un TBT elevado

  • El TBT en el reporte móvil de PageSpeed Insights supera los 300 ms.
  • Advertencias en Lighthouse como “Reduce JavaScript execution time” o “Minimize main-thread work”.
  • El contenido se muestra, pero menús, sliders, filtros o formularios responden con retraso.
  • Scripts de terceros (publicidad, chat en vivo, analítica) aparecen con alto coste en el informe.
  • En dispositivos Android básicos se notan retardos al hacer scroll o clics.

Un buen objetivo es mantener el TBT por debajo de 200 ms en la mayoría de sitios de contenido. En e-commerce o aplicaciones SaaS más complejas, solo defer y async pueden no bastar; allí hay que aplicar división de código, eliminar paquetes innecesarios, optimizar cachés, mejorar tiempos de respuesta y ajustar CSS crítico. Sin embargo, la carga diferida de JavaScript suele ser la primera y más eficaz optimización a implementar.

¿Qué son defer y async?

Por defecto, cuando el navegador encuentra una etiqueta <script> sin atributos, detiene el parseo del HTML, descarga y ejecuta el archivo JavaScript, y luego continúa renderizando la página. Esto es necesario para scripts críticos, pero genera esperas innecesarias si se aplica a todos los archivos. Los atributos defer y async modifican este comportamiento para descargar y ejecutar los scripts según reglas distintas.

¿Cómo funciona defer?

Un script con defer se descarga en segundo plano mientras continúa el parseo del HTML, pero su ejecución se retrasa hasta que el documento está completamente parseado. Además, los scripts defer mantienen el orden en que aparecen en el código HTML, lo que los hace ideales para scripts que dependen unos de otros. Por ejemplo, si primero se carga una librería y luego un script del tema que depende de ésta, defer es la opción segura.

Ejemplo de uso: <script defer src="/js/app.js"></script>. En este caso, el archivo app.js se descarga sin bloquear el renderizado inicial y se ejecuta en orden cuando el DOM está listo. Los navegadores modernos soportan ampliamente defer, siendo una herramienta fiable para optimizar scripts tradicionales.

¿Cómo funciona async?

Un script con async también se descarga en paralelo con el parseo del HTML, pero se ejecuta inmediatamente cuando termina la descarga, interrumpiendo momentáneamente el parseo. Async no garantiza el orden de ejecución: el script que termine antes se ejecuta primero. Por ello, es más adecuado para scripts independientes como analítica, publicidad, píxeles de seguimiento, widgets externos o redes sociales.

Ejemplo: <script async src="/js/analytics.js"></script>. Este script no debe depender de otros scripts locales ni variables cargadas posteriormente. Si analytics.js requiere jQuery u otra librería, async puede causar errores. Es rápido, pero requiere clasificación cuidadosa.

Tabla comparativa entre defer y async

Tabla comparativa entre defer y async
Característicadeferasync
¿Bloquea el parseo HTML durante la descarga?No, se descarga en segundo plano.No, se descarga en segundo plano.
Momento de ejecuciónDespués de que el HTML está completamente parseado.En cuanto termina la descarga.
¿Mantiene el orden de ejecución?Sí, respeta el orden del HTML.No, ejecuta el primero que termina.
Uso recomendadoScripts del tema, módulos dependientes, scripts principales de la aplicación.Scripts independientes de analítica, publicidad, píxeles y widgets externos.
RiesgosPuede retrasar scripts que necesiten ejecutarse antes de DOM listo.Puede causar condiciones de carrera y errores en scripts dependientes.
Impacto en TBTReduce bloqueos iniciales de forma equilibrada y segura.Optimiza la carga temprana de scripts independientes de terceros.

La regla práctica es: si tu script debe ejecutarse en orden, usa defer. Si es completamente independiente, considera async. Si dudas, prueba defer en un entorno staging, revisa errores en consola y verifica interacciones críticas. guía de entorno de staging y respaldo

Plan paso a paso para implementar carga diferida de JavaScript

Agregar defer o async a etiquetas script al azar puede mejorar temporalmente el puntaje, pero romper funciones críticas como pagos, búsquedas, menús, validación o carrito. Para una implementación saludable se requiere un ciclo de medición, clasificación, cambios pequeños, pruebas y monitoreo.

1. Mide el rendimiento actual

Antes de comenzar, establece una línea base. Registra puntajes móviles y de escritorio con PageSpeed Insights. Anota TBT, First Contentful Paint, Largest Contentful Paint y Speed Index en el informe Lighthouse. En Chrome DevTools, revisa el hilo principal en la pestaña Performance; los bloques amarillos largos indican costos de parseo, compilación y ejecución de JavaScript.

Podrías crear una tabla inicial como esta: TBT móvil 780 ms, tiempo de ejecución JS 2,8 segundos, trabajo en hilo principal 4,5 segundos. Si tras optimizar el TBT baja a 280 ms, habrás logrado una mejora del 64%. Registrar estos datos facilita identificar qué cambios funcionan en el equipo.

2. Haz un inventario de scripts

Lista todos los archivos JavaScript que carga la página, ya sea en el código fuente o en la pestaña Network. Identifica su origen, tamaño, momento en que se necesitan y dependencias. Clasifícalos en:

  • Scripts críticos: código necesario para la vista inicial o navegación básica.
  • Scripts locales dependientes: tema, slider, filtros, galerías y módulos de la aplicación.
  • Scripts de terceros independientes: analítica, publicidad, píxeles, chat y componentes sociales.
  • Scripts obsoletos o innecesarios: archivos de plugins no usados.
  • Scripts que se cargan de forma condicional: validación de formularios solo en páginas específicas.

A veces, la mejor optimización no es añadir defer, sino eliminar scripts innecesarios. Un archivo comprimido de 90 KB puede costar más de 300 ms en parseo y ejecución en dispositivos móviles. Por eso conviene limpiar primero y luego retrasar la carga del resto.

3. Determina qué scripts aplicar defer

Normalmente, los scripts principales del tema, comportamientos de menú, sliders, galerías y bundles de la aplicación son buenos candidatos para defer, siempre que no usen métodos obsoletos y bloqueantes como document.write y que puedan ejecutarse tras el DOM listo.

En un tema WordPress, jquery-migrate, scripts del tema y plugins pueden tener dependencias complejas. Poner jQuery como async es arriesgado porque muchas extensiones esperan su carga ordenada. Es mejor aplicar defer controladamente a scripts dependientes o usar opciones de carga optimizadas a nivel plugin. Guía de optimización de velocidad de WordPress

4. Selecciona scripts para async

Google Analytics, etiquetas de publicidad, Facebook Pixel, LinkedIn Insight Tag, algunos widgets de chat y códigos de redes sociales suelen ser candidatos para async. Pero no todos los scripts de terceros son iguales. Algunos chats en vivo necesitan iniciar sesión del usuario al cargar la página y ciertas publicidades esperan un orden específico. Por eso es importante consultar la documentación.

Hacer async un código de analítica independiente suele no afectar la experiencia. Aún así, para minimizar pérdida de datos, controla que se disparen correctamente en reportes en tiempo real. Si usas un tag manager, organiza las etiquetas en contenedores y revisa disparadores. Por ejemplo, scripts de seguimiento de comentarios no deben cargar en páginas sin formulario, ni scripts de interacción con productos en páginas sin productos.

5. Agrega carga condicional y basada en eventos

Defer y async son un buen punto de partida, pero cargar scripts según el comportamiento del usuario puede reducir aún más el TBT. Por ejemplo, el chat en vivo puede cargarse tras 5 segundos o al clicar un botón de ayuda. Un mapa embebido puede cargarse al desplazarse a la sección de contacto. El reproductor de video solo al pulsar “play”.

Este enfoque es especialmente efectivo en sitios de contenido y corporativos, ya que no todos los widgets se necesitan en cada página. Eliminar 200 KB de JavaScript en la carga inicial puede reducir el TBT cientos de milisegundos en móviles con procesadores modestos.

6. Prueba y despliega progresivamente

No implementes cambios directamente en producción. Prueba en un entorno de staging. Realiza pruebas manuales en páginas clave: home, categorías, productos o servicios, contacto, formularios y flujo de pago. Revisa errores en consola, especialmente mensajes como “Cannot read property”, “is not defined” o “undefined function”, que indican problemas de orden o dependencias.

En producción, despliega en grupos pequeños. Primero optimiza scripts terceros independientes, luego scripts del tema. Tras cada cambio, repite los informes Lighthouse bajo la misma red y simulación de dispositivo. No confíes en un único test; promedia al menos tres para resultados fiables.

Notas para aplicar defer y async en sitios WordPress

En WordPress, los scripts se cargan mediante la función wp_enqueue_script desde temas y plugins. En 2026, las versiones modernas permiten definir estrategias de carga más controladas, pero temas antiguos, constructores de páginas y plugins de optimización incompatibles pueden generar conflictos.

Si usas un plugin de rendimiento, evita aplicar defer a todo el JavaScript con un clic; crea listas de exclusión. Scripts sensibles como los de página de pago, login, barra de administración, verificaciones de seguridad y captchas pueden romperse. En tiendas WooCommerce, prueba cuidadosamente los scripts del carrito, pasarelas de pago y selectores de variaciones. Soluciones de alojamiento WooCommerce

Una buena secuencia para WordPress es: elimina plugins no usados, aplica carga condicional a scripts de plugins solo en páginas necesarias, prueba defer en scripts del tema y plugins, y finalmente aplica async o carga diferida a scripts independientes de terceros. Así reduces riesgos de errores graves.

Consideraciones para proyectos personalizados y frameworks

En frameworks modernos como React, Vue, Angular, Next.js o Nuxt, optimizar JavaScript no es solo añadir defer a etiquetas HTML. El tamaño del paquete, code splitting, tree shaking, imports dinámicos y el costo de hidratación influyen mucho en el TBT. Un bundle masivo de 700 KB puede bloquear el hilo principal mucho tiempo aunque use defer.

En proyectos personalizados, usa división de código por rutas. No cargues código de administración, librerías gráficas o editores avanzados en la página principal. Invoca componentes pesados con imports dinámicos cuando se necesiten. Detecta dependencias no usadas con herramientas de análisis. Considera alternativas más ligeras a librerías de fechas, gráficos o animaciones pesadas.

En renderizado del lado servidor o generación estática, aunque el HTML llegue rápido, la hidratación simultánea de cientos de componentes puede elevar el TBT. Evita JavaScript innecesario en el cliente, que es clave en la estrategia de rendimiento 2026.

Relación entre hosting, tiempo de respuesta y rendimiento de JavaScript

El TBT mide directamente el tiempo que JavaScript bloquea el hilo principal en el navegador, pero la infraestructura de hosting impacta indirectamente. Un TTFB lento, falta de compresión, ausencia de HTTP/2 o HTTP/3, caché deficiente y latencia por ubicación remota retrasan la llegada de archivos JS. Esto alarga el ciclo de vida de la página y empeora la experiencia de usuario.

Un hosting de calidad que ofrezca compresión Brotli o Gzip, caché eficaz, versiones PHP actualizadas, discos rápidos y CDN integrado apoya la optimización. La correcta configuración del certificado SSL también es crucial para aprovechar características modernas del navegador, HTTP/2 y conexiones seguras con terceros. Certificados SSL Hostragons Consulta de dominio Hostragons

Por ejemplo, un archivo JavaScript sin comprimir de 320 KB puede reducirse a 95 KB con Brotli. Esto no reduce el TBT en la misma proporción, porque TBT mide costo de ejecución, pero sí acorta tiempos de descarga, mejora la prioridad de recursos y optimiza la experiencia general. Por eso defer, async, caché y hosting deben considerarse en conjunto.

Lista de verificación para medir y validar

No basta con mirar solo el puntaje en PageSpeed para saber si la optimización funciona. Esta lista te ayudará a evaluar el impacto real:

  • ¿Se comparó el TBT móvil antes y después de optimizar?
  • ¿Disminuyeron los archivos más costosos en tiempo de ejecución de JavaScript?
  • ¿Se redujo el número de tareas largas en el registro de Chrome DevTools Performance?
  • ¿Hay errores de JavaScript en consola?
  • ¿Menús, buscadores, filtros, formularios, carrito y pagos funcionan sin problemas?
  • ¿Las etiquetas de terceros para analítica y publicidad se disparan correctamente?
  • ¿Los datos reales de usuarios muestran mejora en INP y retrasos de interacción?
  • ¿Se probaron los cambios tras limpiar caché?

Es importante distinguir datos de laboratorio y de campo. El TBT es una métrica de laboratorio en Lighthouse. En la experiencia real, Interaction to Next Paint (INP) es más representativa. Sin embargo, una reducción en TBT suele traducirse en mejoras en INP, ya que hay menos bloqueo en el hilo principal.

Errores comunes y cómo evitarlos

Aplicar async a todos los scripts

Este es uno de los errores más frecuentes. Async no garantiza orden, por lo que puede generar fallos en scripts con dependencias. Una estructura que funciona bien en un navegador puede fallar en otro o con conexiones lentas. Para scripts dependientes, es mejor comenzar con defer.

Retrasar incorrectamente jQuery y plugins dependientes

En WordPress, muchos plugins dependen del orden de carga de jQuery. Poner jQuery como async puede hacer que los plugins se ejecuten antes de que jQuery esté listo. La solución es identificar la red de dependencias y excluir scripts críticos de la carga diferida.

Dejar sin controlar scripts de terceros

Mientras optimizas tus scripts, puedes olvidar publicidad, chat o analítica de terceros. Sin embargo, estos suelen ser los scripts más pesados según Lighthouse. Eliminarlos si no se usan, cargarlos condicionalmente o retrasarlos hasta interacción del usuario trae grandes beneficios.

Instalar plugins sin medir

Los plugins de rendimiento son útiles, pero añadirlos sin diagnóstico puede aumentar la carga de JavaScript y CSS. Primero identifica el problema, luego selecciona la herramienta adecuada, y siempre valida con pruebas que la métrica TBT mejora.

Ignorar conflictos entre caché y minificación

Usar minificación, combinación, defer y async simultáneamente puede alterar el orden de los archivos y causar errores inesperados en producción. Si usas CDN, caché de servidor y aplicación, recuerda limpiar todas las capas tras cambios.

Escenario realista de optimización

Imagina un sitio corporativo mediano con 18 peticiones JavaScript en la home. Cinco corresponden a scripts del tema y menú, cuatro a sliders y animaciones, tres a formularios y mapas, y seis a analítica, píxeles y chat en vivo. El TBT móvil inicial en Lighthouse es 920 ms.

En el primer paso se eliminan dos plugins de animación no usados, reduciendo 140 KB de JavaScript comprimido. El TBT baja a 760 ms. Luego se aplica defer a scripts del tema y sliders, probando dependencias, bajando a 480 ms. Después, el script de mapa se carga solo al hacer scroll en contacto, el chat tras 7 segundos y analítica y píxeles se ponen async. El TBT final queda en 210 ms.

Este ejemplo muestra que la mejor optimización es por capas: defer y async son herramientas poderosas pero los mejores resultados vienen combinados con limpieza, carga condicional, buen caché y una infraestructura sólida.

Conclusión: estrategia de JavaScript equilibrada y probada para reducir el TBT

Implementar carga diferida de JavaScript en tu sitio es una de las formas más prácticas y efectivas para reducir el TBT. defer ofrece una solución segura para scripts que deben ejecutarse ordenadamente tras el DOM, mientras que async es ideal para scripts de terceros independientes. Para optimizar con éxito, primero mide, clasifica scripts, elimina lo innecesario, prueba cambios progresivamente y monitorea la experiencia real del usuario.

Utilizar una infraestructura rápida, segura y escalable como Hostragons, junto con configuraciones de optimización JavaScript, caché y SSL, contribuye a un rendimiento web más estable. Si buscas mejorar el TBT, comienza analizando tu informe actual y avanza con pequeños pasos medibles. Consulta las soluciones de hosting y rendimiento de Hostragons. Paquetes de hosting web Hostragons

Preguntas frecuentes

¿Se pueden usar defer y async juntos en el mismo script?

Si se aplican ambos en una etiqueta script clásica, los navegadores modernos suelen priorizar async, eliminando la garantía de orden. Por eso no se recomienda usar ambos al mismo tiempo en un mismo archivo. Para scripts con dependencias, defer es más seguro; para independientes, async.

¿La carga diferida de JavaScript mejora directamente el SEO?

Por sí sola, no garantiza un mejor posicionamiento. Sin embargo, mejora la experiencia de usuario, velocidad de interacción y Core Web Vitals, lo que a su vez favorece el SEO. Páginas que responden rápido aumentan satisfacción, conversiones y percepción de calidad para los motores de búsqueda.

¿Es seguro añadir defer a todos los scripts?

No. Algunos scripts deben ejecutarse en la etapa inicial o dependen de un orden específico. Por eso, hay que evaluar el propósito, dependencias y momento de ejecución de cada archivo y probar los cambios en un entorno controlado.

¿Solo con defer y async se puede reducir el TBT?

En sitios pequeños y medianos puede ser suficiente para mejoras significativas. Pero para sitios con frameworks pesados, mucho código de terceros o bundles grandes, se requieren medidas adicionales como división de código, eliminación de JavaScript innecesario, carga condicional, caché optimizado y un hosting robusto.

¿Qué scripts no debo poner como async en WordPress?

Scripts dependientes de jQuery, funciones críticas de pago y carrito, validación de formularios, seguridad y funciones esenciales del tema no deben cargarse con async, ya que romperían el orden y podrían afectar la experiencia del usuario. Primero prueba defer y si es necesario, crea listas de exclusión.

Comparte este artículo:

Equipo de Hostragons

Guías actualizadas de nuestro equipo de expertos sobre alojamiento web, servidores y nombres de dominio. Juntos encontraremos la solución ideal para tu proyecto.

Contáctenos