Über diesen Link finden Sie die W3C-Spezifikationen zu „defer“ und „async“. Sie sagen dazu:
Wenn keines der Attribute vorhanden ist, wird das Skript sofort abgerufen und ausgeführt, bevor der Benutzeragent mit dem Parsen der Seite fortfährt.
Wenn Sie beispielsweise „script.js“ haben, können Sie damit Folgendes tun:
- Die Datei herunterladen
- Die Datei aus dem Cache nehmen
- Sie wird „gelesen“, da vor der eigentlichen Ausführung des Codes der gesamte Code in der Datei gelesen werden muss (sonst könnte es kein Heben geben)
- Ausführen des Codes
Wenn keines der Attribute vorhanden ist, wird das Skript abgerufen[/b] und sofort ausgeführt
Ich sehe „wird abgerufen“ als:
- Der Browser kann script.js aus dem Cache nehmen
- Der Browser kann script.js herunterladen
Ist das so? richtig? Sie verwenden also „abgerufen“, denn wenn Sie „heruntergeladen“ sagen würden, beinhaltet es dann kein Caching?
Ich möchte den Fall ohne Caching besprechen, also in einem Fall wie diesem:
Wenn keines der Attribute vorhanden ist, wird das Skript heruntergeladen und sofort ausgeführt
Kann ich das sagen? Und wenn ja, dann habe ich noch eine letzte Frage dazu.
Moderne Browser verfügen über Preload-Scanner, die vorab nach Javascript-Dateien zum Herunterladen suchen. Also dachte ich: Vielleicht wird ein Preload-Scanner den Download der js-Datei bereits abschließen, bevor der „HTML-Parser“ beim Skript-Tag ankommt. Der „HTML-Parser“ kann also mit anderem HTML vor dem Skript-Tag beschäftigt sein, während der Browser den Download bereits abschließt.
Ist das bis jetzt so? Ich bin mir selbst nicht sicher. Aber wenn das wahr ist, dann verstehe ich die W3C-Spezifikationen nicht, weil sie sagen (wenn alles Vorherige wahr ist):
Wenn keines der Attribute vorhanden ist, wird das Skript heruntergeladen und sofort ausgeführt
Also „sofort ausgeführt“ nach dem Download? Wenn Sie sich in einer synchronen Umgebung befinden, muss sich der gesamte HTML-Code vor diesem Skript-Tag im DOM befinden, bevor das JavaScript ausgeführt wird.
Wenn das alles wahr ist, verstehe ich dann nicht, warum sie sagen können: „Sofort ausgeführt“? Oder ist ein Pre-Load-Scanner etwas Inoffizielles, also ignoriert das W3C dies in seiner Dokumentation. In diesem Fall ist die W3C-Spezifikation also eigentlich nur für ältere Browser korrekt?
Oder kann ein Browser das Skript von einem Preload-Scanner abrufen und das passiert in dem Moment, in dem sich der „HTML-Parser“ am Skript-Tag befindet, vielleicht muss ich es so sehen?
Oder wie muss ich das sehen?
Mobile version