Laden und Ausführen der Reihenfolge der Skripte
Gibt es so viele unterschiedliche Möglichkeiten zur Einbindung von JavaScript in eine html-Seite. Ich weiß, über eine der folgenden Optionen:
- inline-code oder laden von externen URI
- enthalten in <head> oder <body> tag [Eins,Zwei]
- keine,
defer
oderasync
Attribut (nur externe Skripte) - enthalten statische Quelle oder dynamisch Hinzugefügt, die von anderen Skripten (in verschiedenen parse-Staaten, mit verschiedenen Methoden)
Nicht zählen browserscripts von der Festplatte, javascript: - URIs und - onEvent
- Attribute [Drei], es gibt schon 16-alternativen zu bekommen JS ausgeführt und ich bin mir sicher, dass ich etwas vergessen hatte.
Ich bin nicht so besorgt mit fast (parallel) zu laden, bin ich neugierig auf die Reihenfolge der Ausführung (das kann davon abhängen, be -, um-und Dokument, um). Ist es eine gute (cross-browser) Referenz, die deckt wirklich alle Fälle? E. g. http://www.websiteoptimization.com/speed/tweak/defer/ befasst sich nur mit 6 von Ihnen, und in tests meist alten Browsern.
Wie ich fürchte, es gibt nicht, hier meine konkrete Frage: ich habe einige (externe) Kopf-Skripte für die Initialisierung und das Skript laden. Dann habe ich zwei statische, inline-scripts in das Ende des Körpers. Den ersten lässt man den script loader dynamisch anfügen anderen script-element (verweisen auf externe js) am Körper. Die zweite des static, inline-scripts verwenden möchte, js von der zusätzlichen, externen Skript. Kann es verlassen, der andere wurde hingerichtet (und warum :-)?
InformationsquelleAutor der Frage Bergi | 2012-01-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht dynamisch laden-Skripte, oder Sie Kennzeichnen Sie als defer oder async, dann Skripte werden in der Reihenfolge geladen, begegnet in der Seite. Es spielt keine Rolle, ob es ein externes script oder eine inline-Skript - Ausführung in der Reihenfolge, wie Sie gefunden werden in die Seite. Inline-scripts, die sich nach dem externen Skripts haben werden gehalten, bis Sie alle externen scripts, die kamen, bevor Sie geladen und ausgeführt.
Async scripts (unabhängig davon, wie Sie angegeben sind als async) laden und ausführen in einer unvorhersagbaren Reihenfolge. Der browser lädt diese parallel und es ist frei, führen Sie Sie, in welcher Reihenfolge es will.
Es ist nicht vorhersehbar, um zwischen mehreren async Dinge. Wenn man benötigt eine vorhersehbare Reihenfolge, dann müsste es codiert werden durch die Registrierung für Last-Benachrichtigungen von asynchronen scripts und manuell Sequenzierung von javascript-aufrufen, wenn die entsprechenden Dinge geladen werden.
Wenn ein Skript-tag eingefügt wird dynamisch, wie die Reihenfolge der Ausführung verhält sich je nach browser. Sie können sehen, wie sich Firefox verhält sich in diese Referenz Artikel. Kurz gesagt, die neueren Versionen von Firefox standardmäßig dynamisch Hinzugefügt script-tag, async, es sei denn, das script-tag gesetzt wurde, ansonsten.
Einem script-tag mit
async
werden können, werden ausgeführt, sobald es geladen wird. In der Tat, der browser kann pause der parser aus was sonst es Tat, und führen Sie das Skript. Also, es kann wirklich ausführen zu fast jeder Zeit. Wenn das Skript zwischengespeichert wurde, könnte es fast sofort ausgeführt. Wenn das script dauert es eine Weile zum laden, es kann ausgeführt werden, nachdem der parser ist fertig. Die eine Sache zu erinnern mitasync
ist, kann es jederzeit ausführen, und dieser Zeitpunkt ist nicht vorhersehbar.Einem script-tag mit
defer
wartet, bis der gesamte parser ist fertig und läuft dann alle Skripts die mit gekennzeichnetdefer
in der Reihenfolge, wie Sie aufgetreten sind. Dieses erlaubt Sie zum markieren mehrerer Skripte, die voneinander abhängig sind, wiedefer
. Sie alle bekommen verschoben, bis nach der Dokument-parser ist fertig, aber Sie werden in der Reihenfolge ausgeführt, Sie traten auf die Erhaltung Ihrer Abhängigkeiten. Ich denke, derdefer
wie die Skripte fallen in eine Warteschlange, die verarbeitet werden, nachdem der parser ist fertig. Technisch ist der browser möglicherweise den Download der Skripte im hintergrund zu jeder Zeit, aber Sie wird nicht ausgeführt oder Sperrung der parser erst, nachdem der parser ist fertig Parsen der Seite und Parsen und ausführen von inline-Skripts, werden nicht markiert, defer oder async.Hier ein Zitat aus diesem Artikel:
Den relevanten Teil der HTML5-Spezifikation (für die neueren, kompatiblen Browsern) ist hier. Es gibt eine Menge geschrieben, dort über die asynchrone Verhalten. Offensichtlich ist diese Spezifikation gilt nicht für ältere Browser (oder mal-Bestätigung Browsern), die das Verhalten würden Sie wahrscheinlich haben, um zu testen, um zu bestimmen.
Einem Zitat aus der HTML5-Spezifikation:
InformationsquelleAutor der Antwort jfriend00
Browser ausführen der Skripts in der Reihenfolge, die es der Sie findet. Wenn Sie rufen Sie ein externes script, es wird die Sperrung der Seite, bis das Skript geladen und ausgeführt.
Testen diese Tatsache:
Dynamisch hinzugefügte Skripte ausgeführt werden, sobald Sie an das Dokument angefügt.
Testen diese Tatsache:
Reihenfolge der Alarme ist "angehängt" -> "Hallo!" -> "final"
Wenn in einem Skript, das Sie versuchen, Zugriff auf ein element, das noch nicht erreicht wurde (Beispiel:
<script>do something with #blah</script><div id="blah"></div>
), dann erhalten Sie eine Fehlermeldung.Insgesamt, ja Sie können externe Skripts und dann auf Ihre Funktionen und Variablen, aber nur, wenn Sie verlassen die
<script>
tag und ein neues zu beginnen.InformationsquelleAutor der Antwort Niet the Dark Absol