Im Folgenden werde ich einen Artikel zur Optimierung des Ladens von JS-Dateien (ausführliche Erklärung) mit Ihnen teilen, der einen guten Referenzwert hat und ich hoffe, dass er für alle hilfreich sein wird.
Im JS-Engine-Teil können wir lernen, dass die Rendering-Engine beim Parsen des Skript-Tags die Kontrolle an die JS-Engine übergibt. Wenn das Skript eine externe Ressource lädt, muss es warten, bis es heruntergeladen wird bevor es ausgeführt werden kann. Hier können wir also viel Optimierungsarbeit leisten.
Platzieren Sie es unten im BODY
Damit die Rendering-Engine den DOM-Baum so früh wie möglich rendern kann, müssen wir das Skript dort platzieren Das Phänomen des weißen Bildschirms bedeutet, dass das DOMContentLoaded-Ereignis frühzeitig ausgelöst wird, selbst wenn Sie das js-Skript am Ende des Körpers in iOS Safari und Android platzieren Browser und IOS-Webansicht, das Ergebnis wird immer noch das gleiche sein. Daher sind hier zusätzliche Vorgänge erforderlich, um das Laden von js-Dateien zu optimieren.
LADEN VERSCHIEBEN
Dies ist ein in HTML4 definiertes Skriptattribut, das zur Darstellung beim Rendern verwendet wird Wenn die Engine auf ein Skript stößt, wird das Skript vorübergehend angehalten und geladen, wenn es auf eine externe Ressource verweist. Die Rendering-Engine analysiert weiterhin das folgende HTML-Dokument. Wenn die Analyse abgeschlossen ist, wird das Skript im Skript ausgeführt.
<script src="outside.js" defer></script>
Sein Support ist <=IE9.
Und seine Ausführungsreihenfolge ist streng abhängig, das heißt:
<script src="outside1.js" defer></script> <script src="outside2.js" defer></script>
Nachdem die Seite analysiert wurde, beginnt er mit der Ausführung Outside1- und Outside2-Dateien nacheinander.
Wenn Sie defer unter IE9 verwenden, werden die beiden möglicherweise nicht nacheinander ausgeführt. Um dies zu handhaben, ist ein Hack erforderlich, der darin besteht, ein leeres Skript-Tag zwischen den beiden
<script src="outside1.js" defer></script> <script></script> //hack <script src="outside2.js" defer></script>
ASYNC-Laden
async ist ein neu definiertes Skriptattribut in H5. Es ist ein weiterer js-Lademodus. Die Rendering-Engine analysiert die Datei (mit Asynchronität)parst weiterhin die verbleibenden Dateien und lädt parallel die externen Ressourcen des Skripts. Wenn das Skript geladen wird, stoppt der Browser die Analyse des Dokuments, erteilt der JS-Engine die Berechtigung und gibt das zu ladende Skript an. Nach der Ausführung das Browser-Analyseskript fortsetzen Es ist ersichtlich, dass Async auch das Problem des Blockierens des Ladens lösen kann. Allerdings wird async asynchron ausgeführt, was dazu führt, dass die Reihenfolge der Dateiausführung inkonsistent ist. Das heißt:<script src="outside1.js" async></script> <script src="outside2.js" async></script>
Skript asynchron
Skript asynchron ist das grundlegende Ladeprinzip, das von einigen asynchronen Ladebibliotheken verwendet wird (z. B. require) Gehen Sie direkt zum Code:function asyncAdd(src){ var script = document.createElement('script'); script.src = src; document.head.appendChild(script); } //加载js文件 asyncAdd("test.js");
var asyncAdd = (function(){ var head = document.head, script; return function(src){ script = document.createElement('script'); script.src= src; script.async=false; document.head.appendChild(script); } })(); //加载文件 asyncAdd("first.js"); asyncAdd("second.js"); //或者简便一点 ["first.js","second.js"].forEach((src)=>{async(src);});
Die js-Datei sollte am Ende des Körpers platziert werden
Wenn asynchron verwendet wird, fügen Sie aus Gründen der Abwärtskompatibilität „defer“ am Ende hinzu<script src="test.js" async defer></script> //如果两者都支持,async会默认覆盖掉defer //如果只支持一个,则执行对应的即可
Verwendung von Async- und Await-Funktionen in Node.js
Lösung des Problems, dass Webpack nicht auf 127.0.0.1 zugreifen kann
Remotezugriffskonfigurationsmethode im Webpack-Dev-Server implementieren
Das obige ist der detaillierte Inhalt vonProbleme im Zusammenhang mit der Optimierung des Dateiladens in js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!