Si vous n'êtes pas le chargement dynamique de scripts ou en les marquant comme reporter ou asynchrone, puis les scripts sont chargés dans l'ordre rencontrées dans la page. Il n'a pas d'importance si c'est un script externe ou un script en ligne - ils sont exécutés dans l'ordre où ils sont rencontrés dans la page. Inline scripts qui viennent après des scripts externes sont tenues jusqu'à ce que tous les scripts externes qui sont venus avant eux ont chargé et exécuté.
Async scripts (indépendamment de la façon dont ils sont spécifiés comme async) de charger et d'exécuter dans un ordre imprévisible. Le navigateur charge en parallèle et il est libre de les exécuter dans n'importe quel ordre qu'il veut.
Il n'y a pas d'ordre prévisible entre plusieurs async choses. Si on a besoin d'un ordre prévisible, alors il devrait être codée dans en vous inscrivant à la charge des notifications à partir de la async scripts manuellement et de séquençage javascript appels lorsque les choses sont chargés.
Lorsqu'une balise script est inséré dynamiquement, la façon dont l'ordre d'exécution se comporte dépendra du navigateur. Vous pouvez voir comment Firefox se comporte dans cet article de référence. En un mot, les versions récentes de Firefox par défaut une dynamique ajouté balise de script async, à moins que la balise de script a été définie autrement.
Voici une citation de cet article:
script insérer des scripts à exécuter de manière asynchrone dans IE et WebKit, mais
de façon synchrone à l'Opéra et le pré-4.0 de Firefox.
La partie pertinente de la spec HTML5 (pour les nouveaux navigateurs compatibles) est ici. Il y a beaucoup écrit sur les async comportement. Évidemment, cette spécification ne s'applique pas pour les navigateurs plus anciens (ou mal-confirmant les navigateurs) qui est le comportement que vous aurait probablement pour tester à déterminer.
Une citation de la spec HTML5:
Alors, la première des options suivantes qui décrit la situation
doivent être suivies:
Si l'élément possède un attribut src, et cet élément a un reporter
attribut, et l'élément qui a été marqué comme "analyseur-insérés", et
l'élément n'a pas un attribut async
L'élément doit être ajouté
à la fin de la liste des scripts à exécuter lorsque le document
a terminé l'analyse associée avec le Document de l'analyseur que
créé l'élément.
La tâche, la mise en réseau de la tâche source des lieux sur la tâche de la file d'attente une fois
la récupération de l'algorithme a terminé devez définir l'élément "prête à
être analyseur exécuté" pavillon. L'analyseur va gérer l'exécution du script.
Si l'élément possède un attribut src, et l'élément a été signalé
"parser-insérés", et l'élément n'a pas un attribut async
L'élément est dans l'attente de l'analyse de blocage de script du Document de
l'analyseur qui a créé l'élément. (Il peut seulement être un de ces
script par Document à la fois.)
La tâche, la mise en réseau de la tâche source des lieux sur la tâche de la file d'attente une fois
la récupération de l'algorithme a terminé devez définir l'élément "prête à
être analyseur exécuté" pavillon. L'analyseur va gérer l'exécution du script.
Si l'élément n'a pas un attribut src, et l'élément a été
marqué comme "analyseur-insérés", et le Document de l'analyseur HTML ou
Analyseur XML qui a créé l'élément script a une feuille de style qui est
le blocage des scripts de L'élément est dans l'attente de l'analyse de blocage de script de
le Document de l'analyseur qui a créé l'élément. (Il ne peut
être un tel script par Document à la fois.)
Définissez l'élément "prête à être analyseur exécuté" pavillon. L'analyseur
gérer l'exécution du script.
Si l'élément possède un attribut src, ne dispose pas d'un attribut async,
et n'a pas la "force-async" drapeau de L'élément doit être ajouté
à la fin de la liste des scripts qui s'exécutent dans l'ordre dès
que possible associée avec le Document de l'élément script à l'
le temps de la préparer un script algorithme a commencé.
La tâche, la mise en réseau de la tâche source des lieux sur la tâche de la file d'attente une fois
la récupération de l'algorithme a terminé devez exécuter les étapes suivantes:
Si l'élément n'est pas le premier élément dans la liste des scripts
qui va l'exécuter dans l'ordre dès que possible à laquelle il a été ajouté
ci-dessus, puis marquer l'élément comme prêt à abandonner ces étapes sans
l'exécution du script, encore.
Exécution: Exécuter le bloc de script correspondant à la première script
élément dans cette liste de scripts qui s'exécutent dans l'ordre dès que
possible.
Supprimer le premier élément de cette liste de scripts à exécuter
dans l'ordre dès que possible.
Si cette liste de scripts qui s'exécutent dans l'ordre dès que possible
n'est pas encore vide et la première entrée a déjà été marqué comme
prêt, puis revenir à l'étape marqué d'exécution.
Si l'élément possède un attribut src de L'élément doit être ajouté à la
ensemble de scripts à exécuter dès que possible du Document
de l'élément script au moment de la préparer un script algorithme
commencé.
La tâche, la mise en réseau de la tâche source des lieux sur la tâche de la file d'attente une fois
la récupération de l'algorithme a complété doit exécuter le bloc de script et
ensuite, retirer l'élément de l'ensemble de scripts qui seront exécutés
dès que possible.
Sinon, L'agent utilisateur doit exécuter immédiatement le bloc de script,
même si d'autres scripts sont déjà en cours d'exécution.
0 votes
Avez-vous regardé Chargement des scripts sans blocage par Steve Souders ? Il date un peu aujourd'hui, mais contient toujours des informations précieuses sur le comportement des navigateurs en fonction d'une technique de chargement de script spécifique.