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.