El Atributo ASYNC

Es útil para optimizar el rendimiento de las páginas web. Al permitir la carga asíncrona de los scripts.
El atributo async
se utiliza en la etiqueta <script>
para cargar y ejecutar scripts de forma asíncrona, mejorando el rendimiento y la velocidad de carga de una página web. Este atributo es clave para optimizar la carga de recursos externos (como archivos JavaScript) sin bloquear el análisis del HTML. A continuación, te explicamos cómo usarlo correctamente.
¿Qué hace el atributo async
?
-
Carga el script en segundo plano mientras el navegador sigue analizando el HTML.
-
Ejecuta el script inmediatamente después de que se descargue (sin esperar a que el HTML termine de cargarse).
-
No garantiza el orden de ejecución: Si hay múltiples scripts
async
, pueden ejecutarse en cualquier orden (el que se descargue primero).
Sintaxis básica
<script src="archivo.js" async></script>
¿Cuándo usar async
?
Ideal para scripts que no dependen del DOM o de otros scripts. Ejemplos comunes:
-
Analíticas web (Google Analytics, Hotjar).
-
Publicidad (Google AdSense).
-
Widgets sociales (botones de compartir).
-
Scripts de rendimiento (lazy loading, prefetching).
Ejemplos prácticos
Script de analíticas
<!-- Google Analytics con async --> <script async src="https://www.googletagmanager.com/gtag/js?id=TU_ID" ></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'TU_ID'); </script>
Carga de un script externo
<script src="mi-script.js" async></script>
Comparación: async
vs defer
Atributo | Carga | Ejecución | Orden |
---|---|---|---|
Sin atributo | Bloquea el HTML | Inmediata (antes de renderizar) | Según aparición en el HTML |
async |
No bloqueante (paralela) | Inmediata al terminar descarga | Sin orden garantizado |
defer |
No bloqueante (paralela) | Tras analizar todo el HTML | Según aparición en el HTML |
Mejores prácticas
Usa async
para scripts independientes:
Si el script no necesita acceder al DOM ni depende de otros scripts, async
es ideal.
Evita async
en scripts críticos:
Si el script es esencial para el renderizado inicial (ej: un framework como React), usa defer
o carga el script normalmente.
No uses async
en scripts con dependencias:
Si el script A depende del script B, no uses async
, ya que no se garantiza el orden de ejecución.
Combina con nomodule
para compatibilidad:
Para navegadores antiguos que no soportan módulos ES6:
<script src="moderno.js" type="module" async></script> <script src="legacy.js" nomodule async></script>
Errores comunes
Usar async
en scripts que modifican el DOM:
Si el script necesita elementos HTML que aún no se han cargado, puede fallar.
<!-- Riesgo: El script podría ejecutarse antes de que exista #miElemento --> <script src="script.js" async></script> <div id="miElemento"></div>
Asumir orden de ejecución:
Dos scripts con async
pueden ejecutarse en orden aleatorio:
<script src="a.js" async></script> <script src="b.js" async></script> <!-- Puede ejecutarse antes que a.js -->
Compatibilidad
-
Navegadores modernos: Todos soportan
async
(Chrome, Firefox, Safari, Edge). -
Internet Explorer: Soporte desde IE10+.
Ejemplo avanzado: Carga asíncrona de scripts dinámicos
Puedes añadir scripts con async
mediante JavaScript:
const script = document.createElement('script'); script.src = 'mi-script.js'; script.async = true; document.body.appendChild(script);
Conclusión
El atributo async
es una herramienta poderosa para:
-
Mejorar el rendimiento de carga de la página.
-
Evitar bloqueos en el renderizado inicial.
-
Optimizar scripts no críticos (analíticas, publicidad).
Ejemplo final:
<!DOCTYPE html> <html> <head> <!-- Scripts no críticos cargados con async --> <script async src="https://widgets.example.com/social.js"></script> <script async src="https://www.google-analytics.com/analytics.js"></script> </head> <body> <!-- Contenido de la página --> <script src="script-critico.js"></script> <!-- Script crítico sin async --> </body> </html>
¡Usa async
estratégicamente para equilibrar velocidad y funcionalidad!