Depende del codigo de tus ficheros y de tu página web.
normalmente hay que esperar a que este listo el dom ( si tu codigo fuera para este fin ), dependiendo de tu codigo js, para eso se usa por ejemplo:
$(document).ready();
muchos lo hacen de esta manera para manipular el dom insertando el tag en <head>
El documento se procesa y para cuando encuentra un tag <script>
, entonces una vez descargado continua procesando, en varios casos afectando el performance, para evitar eso lo mas recomendado en varios sitios es ponerlo antes de </body>
para asi evitar bloqueo de descargas en paralelo. esto segun yahoo: http://developer.yahoo.com/performance/rules.html#js_bottom
hay un problema con esto, ya que el script no cargaría hasta que el documento entero este procesado. esto podria afectar el performance, y se podria ver la regla de los segundos donde si no carga a tiempo tu página el usuario se marcha a otra.
Todo navegador moderno cuenta ya con atributos defer
y async
para los tags <script>
, con estos dos atributos le decimos al navegador cuando el documento procesa mientras se descargan los scripts. con estos atributos actualmente se considera anticuada la manera de insertar los tags <script>
antes de </body>
.
el atributo defer
descarga en orden los script de manera asíncrona, sin bloquear el procesamiento del documento. espera a que la pagina haya cargado.
Nota: debes tener en cuenta que defer no podria tener el mismo comportamiento en todos los navegadores, eso no ocurre con async
el atributo async
descarga todos los script de manera asíncrona, son procesados tan pronto como descargados.
google nos da ciertas sugerencias a la hora de insertar scripts:
https://developers.google.com/speed/docs/insights/PrioritizeVisibleContent#DeferLoadingJS
mi sugerencia:
Depende el codigo de tu página, de si vas a manipular dom y del performance. la manera moderna hoy en dia es insertar los tags <script>
en <head>
con async
y defer
EDIT: aca unas tablas para ver la compatibilidad de los navegadores para los atributos mencionados arriba:
http://caniuse.com/#feat=script-async
http://caniuse.com/#feat=script-defer