2011-12-26 20 views
26

De acuerdo con http://caniuse.com/script-defer, la mayoría de los navegadores admiten el atributo script de la etiqueta defer.

Me gustaría saber si las secuencias de comandos especificadas por <script defer src="..."> se ejecutan antes o después de jQuery's $(document).ready()? ¿Los navegadores principales y modernos (Chrome, Firefox, IE, etc.) son consistentes en el orden de ejecución o varían?

Respuesta

14

En base a esta violín que tengo que decir de jQuery $(document).ready() ejecuta después un guión declara con defer. Lo probé con Firefox y Chrome, y ambos tuvieron el mismo comportamiento independientemente de la secuencia de los guiones.

Supongo que el comportamiento en otros navegadores puede cambiar en función de su implementación, por lo que siempre es incierto.

EDIT: Como resultado, el atributo defer se debe utilizar con un archivo javascript externo. Edité el violín para mostrar esto, aparentemente con los mismos resultados.

violín Actualizado aquí: http://jsfiddle.net/RNEZH/15/

+3

Los mismos resultados en Safari. – Charlie

+2

Mismo resultado en Opera, pero ¿no es el atributo defer solo interesante para scripts externos? No creo que tenga sentido. – Bergi

+0

@Bergi, externo o no, el atributo 'defer' es para diferir la ejecución del script. ¿Qué crees que no tiene sentido? –

12

El atributo defer tiene un buen write-up and analysis. También Consulte los comentarios en la publicación para obtener información adicional sobre cómo se ha redefinido defer en HTML5.

Mi conclusión: defer es demasiado dependiente del navegador para contar. Por lo tanto, use la técnica jQuery doc ready.

En otras palabras, una razón importante para jQuery es cubrir las inconsistencias del navegador. El aplazamiento es otra de esas incoherencias que debe evitarse para las páginas bien escritas.

+0

No veo ningún comentario que contenga información sobre cómo diferir ha sido redefinido en HTML5. – nilskp

5

Simplemente, script debe ser ejecutado antes de $(document).ready() si defer se utiliza o no, y casi todos los principales navegadores supportdefer.

Pero para ser un lado seguro, le recomiendo usar ambos $(document).ready() y defer. ¿Por qué defer? Debido a que ayuda a que la página aparezca rápidamente (ya que el script externo se carga en paralelo) y es un factor muy importante en la herramienta de velocidad de página de Google, puede encontrar un buen detalle aquí http://code.google.com/speed/page-speed/docs/payload.html#DeferLoadingJS

Cuestiones relacionadas