2010-12-01 20 views
5

Cuando se analiza su página, y aparece un <script src='someExternalSite/jquery.js'></script> o lo que sea, ¿espera la página hasta que ese archivo se descargue y esté disponible antes de continuar con el análisis?¿Las referencias javascript externas hacen que el navegador espere hasta que se descarguen?

Agregado:

¿La mayoría de los navegadores descargar simultáneamente todas las secuencias de comandos para ahorrar tiempo (incluso si ellos se ejecutan en orden)?

Respuesta

2

cada etiqueta bloquea la página de más representaciones hasta que el archivo js se haya descargado por completo. Es una buena idea colocar el archivo js en la etiqueta del final del cuerpo

0

Todos los navegadores principales deben intentar obtener esos archivos de forma síncrona porque el próximo script de la lista podría basarse en el anterior.

0

Sí, es por eso que la gente recomienda agregar scripts justo antes de la etiqueta </body>, o usar el atributo defer.

2

hace que la espera hasta que la página se archivo descargado y disponible antes de continuar para analizar?

No solo espera hasta que se haya descargado el JS, sino que espera hasta que se haya procesado y ejecutado. Los otros consejos sobre ponerlo al final de la página son acertados.

qué la mayoría de los navegadores de forma simultánea descarga todos los guiones para ahorrar tiempo (aunque ellos se ejecutan en orden)?

En realidad, creo que solo los más nuevos lo hacen. Me encontré con una página web sobre esto hace siglos que no marcaba, lo siento.

2

Sí, bloqueará y la secuencia de comandos solo se ejecutará cuando se carguen otras secuencias de comandos anteriores.

E.g.

<script src='someExternalSite/script1.js'></script> 
<script src='someExternalSite/script2.js'></script> 

La mayoría de los navegadores intentarán acelerar las cosas cargando estos dos scripts en paralelo. Incluso si script2.js se carga antes de script1.js, no se ejecutarán hasta que se carguen ambos.

Recientemente tuve problemas con esto. Así que elaboro un par de puntos relacionados.

document.write() fuercen al analizador de parar, y la inserción de la secuencia de comandos de esta manera todavía se ejecutará de forma secuencial (Script1.js antes Script2.js):

document.write('<script src=\'someExternalSite/script1.js\'></script>'); 
    document.write('<script src=\'someExternalSite/script2.js\'></script>'); 

Por último, se puede obtener de carga completamente asíncrona haciendo:

var script1 = document.createElement('script'); 
script1.src = 'script1.js'; 
document.getElementByTagName('body')[0].appendChild(script1);  

var script2 = document.createElement('script'); 
script2.src = 'script2.js'; 
document.getElementByTagName('body')[0].appendChild(script2);  

El final es muy rápido, ya que los guiones se cargan completamente en paralelo, pero hay una gran Gotcha. Para navegadores basados ​​en Webkit, la orden NO está garantizada, script2.js se ejecutará antes de script1.js si se carga primero. Si puedes evitarlo, por ejemplo tener todos los scripts en un archivo javascript, entonces este método es genial.

Dynamic script addition should be ordered?

Cuestiones relacionadas