La ubicación de tus etiquetas <script>
de JavaScript puede tener un impacto significativo en el rendimiento de carga de tu página y en cómo interactúan con el DOM.
Tradicionalmente: Antes de cerrar </body>
(Recomendado por defecto)
Durante mucho tiempo, la práctica recomendada ha sido colocar la mayoría de las etiquetas <script>
justo antes del cierre de la etiqueta </body>
.
...
<script src="mi-script.js"></script>
<script src="otro-script.js"></script>
</body>
</html>
Lenguaje del código: PHP (php)
Razones para esta práctica:
<script>
(sin atributos async
o defer
), detiene el análisis (parsing) del HTML y la renderización de la página para descargar, analizar y ejecutar el script. <head>
, el usuario verá una página en blanco durante más tiempo mientras esto ocurre. <head>
intenta acceder a un elemento que aún no ha sido creado, fallará.Alternativas modernas con atributos en el <head>
: async
y defer
HTML5 introdujo los atributos async
y defer
para las etiquetas <script>
, que te dan más flexibilidad si prefieres (o necesitas) colocar tus scripts en el <head>
:
<head>
...
<script src="script-independiente.js" async></script>
<script src="mi-script-principal.js" defer></script>
<script src="otro-script-que-depende-del-anterior.js" defer></script>
...
</head>
Lenguaje del código: PHP (php)
defer
:DOMContentLoaded
.defer
se ejecutan en el orden en que aparecen en el documento.async
:async
.Conclusión y recomendación actual:
<script ... defer>
en el <head>
: Para la mayoría de los scripts que necesitan el DOM o dependen del orden, esta es a menudo la mejor opción moderna. Permite que el navegador descubra y descargue los scripts antes, sin bloquear el renderizado.</body>
: Sigue siendo una práctica sólida y segura, especialmente si no quieres preocuparte por async
/defer
o si tienes scripts que no son críticos para el renderizado inicial.<script ... async>
en el <head>
: Para scripts de terceros, independientes, donde el orden no importa.<script>
sin async
o defer
en el <head>
a menos que tengas una razón muy específica y bien entendida (por ejemplo, un script que deba modificar algo antes del primer renderizado, lo cual es poco común).Prioriza siempre la experiencia del usuario y el rendimiento de carga de la página.