Stellen Sie sicher, dass zuerst ein Javascript-Skript ausgeführt wird?

7

Ich habe bemerkt, dass einige Skripts vor anderen auf einer bestimmten Seite aufgerufen werden. Ich frage mich, welche Reihenfolge für das Laden von Skripten erforderlich ist. In-Page vor referenzierten .js-Skripten? Werden sie in der Reihenfolge vom ersten <script> ausgeführt, das in der letzten Seite erwähnt wird, oder ist dieser Browser abhängig? Wie kann man sicherstellen, dass ein bestimmtes Skript zuerst auf einer Seite ausgeführt wird?

    
NoBugs 21.02.2012, 23:57
quelle

4 Antworten

4
  

Ich habe bemerkt, dass einige Skripte vor anderen auf einem bestimmten aufgerufen werden   Seite. Ich habe mich gefragt, welche Reihenfolge für das Laden von Skripten erforderlich ist?

Dies wird von W3C in ihren Sprachspezifikationen festgelegt. Für die HTML 4.01-Spezifikation beispielsweise ist sie in Abschnitt 18.2.4 Dynamische Änderung von Dokumenten, Punkt 1 .

  

In-Page vor den referenzierten .js-Skripten?

Siehe oben. Nein, Inline- und verknüpfte Skripte werden identisch behandelt.

  

Werden sie in der Reihenfolge ausgeführt, von der zuerst genannten auf die letzte Seite,   oder ist das Browser-abhängig?

Die Spezifikationen erfordern, dass sie nacheinander von oben nach unten ausgeführt werden. Sie müssen einen Browser finden, der die Sprache entsprechend der Spezifikation implementiert. Ich kann mir momentan nicht vorstellen, dass SCRIPT-Tags anders gehandhabt werden, aber ich bin mir sicher, dass das möglich ist.

Eine andere Sache ist die Definition von "run". Das klingt nach semantischem Parsing, ist es aber nicht. Wie jede Programmiersprache ist auch JavaScript so gestaltet, dass es sich nach Standards verhält. JavaScript ist im Standard ECMA-262 5.1 Edition / Juni 2011 festgelegt von links nach rechts in Abschnitt 7 Lexikalische Konventionen zu bewerten. (Zeilenenden werden als das am weitesten links stehende Zeichen der nächsten Zeile behandelt.) Dieses Dokument enthält auch Konventionen für die Reihenfolge, in der Anweisungen und andere Operationen ausgewertet werden, z. B. WHILE- oder FOR-Anweisungen.

  

Wie kann man sicherstellen, dass ein bestimmtes Skript zuerst auf einer Seite ausgeführt wird?

(1) Setzen Sie es an die Spitze, und (2) wählen Sie einen Browser, der die Sprachspezifikation implementiert.

Ich glaube jedoch, dass hinter dieser Frage noch etwas steckt. Wenn Sie verhindern möchten, dass der unerwartete Code ausgeführt wird, müssen Sie ihn blockieren, bis der ONLOAD-Ereignishandler registriert, dass die Seite vollständig ist. (Schließen Sie einfach Ihre Operationen in eine Funktion ein oder umgeben Sie sie mit einem IF, um nach einem booleschen Flag zu suchen, dh isLoaded wird von ONLOAD auf TRUE gesetzt.) Wenn der ONLOAD-Event-Handler ausgelöst wird, können Sie Vorgänge ohne eigenen Zeitplan starten sich um Dinge wie uninstantiierte DOM-Objekte kümmern müssen.

    
ingyhere 22.02.2012, 23:54
quelle
9

Solange keine Skripts dynamisch geladen oder als async oder verzögert gekennzeichnet sind, werden Skripts in der auf der Seite angegebenen Reihenfolge ausgeführt oder ausgewertet. Die ersten gefundenen Skripts werden zuerst ausgeführt.

Eine extern referenzierte Skriptdatei, die geladen werden muss, führt dazu, dass alle weiteren JavaScript-Ausführungen warten, bis die extern referenzierte Datei geladen und analysiert wurde und ausgeführt wird.

Somit ist die Auswertungsreihenfolge von normalem (nicht-asynchronen, nicht-verzögerten) Javascript 100% als die Reihenfolge bestimmt, in der es auf der Seite angetroffen wird.

    
jfriend00 22.02.2012 00:00
quelle
5

Standardmäßig werden script -Tags nacheinander heruntergeladen und ausgewertet, wie sie in einem HTML-Dokument vorkommen.

Wenn Sie jedoch die Attribute async oder defer verwenden, erfolgt die Ausführung entweder, nachdem das Skript den Download beendet hat (async) oder nachdem die Seite geladen (verschoben) wurde.

    
fullsailor 22.02.2012 00:01
quelle
1

Skripts werden in der Reihenfolge ausgeführt, in der sie in der HTML-Datei ausgewertet werden, genau wie Sie es von oben nach unten lesen würden.

Async und Defer können dies jedoch für Browser, die diese implementiert haben, außer Kraft setzen.

    
Aron Cederholm 22.02.2012 00:03
quelle

Tags und Links