Async-Attribut und Skripte am Ende

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Ein Leser schrieb mir kürzlich und fragte mich (im Wesentlichen)

Gibt es einen Grund, das async-Attribut zu verwenden, wenn sich das script bereits am Ende der Seite befindet?

Ich bin kein Meister darin, aber so verstehe ich das...

Worüber er sprach, war dies

  <script async src="/js/script.js"></script>

</body>

Wir haben das schon einmal kurz behandelt. Es ist jedoch besonders interessant, es jetzt noch einmal zu betrachten, da das async-Attribut mittlerweile wirklich der einzig empfohlene Weg ist, asynchrone Skripte zu implementieren.

Gibt es also überhaupt einen Grund, das async-Attribut zu verwenden, wenn das script bereits am Ende der Seite platziert ist?

Kurze Antwort

Nein.

Längere Antwort

Was Sie mit dem async-Attribut zu verhindern versuchen, ist das Blockieren des Parsers. Wenn Sie das async-Attribut verwenden, sagen Sie: Ich möchte nicht, dass der Browser aufhört, was er tut, während er dieses Skript herunterlädt. Ich weiß, dass dieses Skript nichts wirklich von etwas benötigt, das im DOM fertig sein muss, wenn es ausgeführt wird, und dass es auch nicht in einer bestimmten Reihenfolge ausgeführt werden muss.

Wenn Sie das Skript am Ende der Seite laden, ist der Parser im Wesentlichen bereits fertig, sodass das Blockieren keine große Rolle spielt. Sie *verzögern* das Skript im Grunde bereits, was eine Art härteres Async ist. Siehe Vergleich.

Es könnte sogar ein wenig gefährlich sein.

Wenn Sie einfach davon ausgegangen sind, dass async = gut ist, könnten Sie etwas tun wie

  <script async src="/js/libs.js"></script>
  <script async src="/js/page.js"></script>

</body>

Das könnte schlechte Nachrichten sein, denn die Chancen stehen gut, dass "libs.js" Abhängigkeiten für "page.js" hat, aber jetzt gibt es keine Garantie für die Reihenfolge, in der sie ausgeführt werden (schlecht).

Es ist meistens eine Sache von Drittanbietern.

Skripte von Drittanbietern sind der Hauptanwendungsfall für asynchrone Skripte. Sie (die Drittanbieter) können nicht kontrollieren, wo Sie dieses Skript auf Ihrer Seite platzieren, daher sind sie normalerweise so konzipiert, dass sie sowieso funktionieren, egal wann/wo sie geladen werden. Sie können Drittanbieter auch nicht kontrollieren (das ist, was ein Drittanbieter ist, Wayne), daher ist es ideal, dafür zu sorgen, dass sie Ihre Website nicht verlangsamen.

Gibt es noch andere Anwendungsfälle?

Ich schätze, wenn Sie den Download eines Ihrer eigenen Skripte sofort starten wollten und es keine Rolle spielt, wann es ausgeführt wird, könnten Sie es in den <head> einfügen und es asynchron laden.

Ich könnte mich vielleicht irren.

Ich neige dazu, diese JavaScript-Ratschlagsposts zu vermasseln, also wenn ich das getan habe, lasst uns in den Kommentaren darüber sprechen und ich werde dafür sorgen, dass der Inhalt dieses Posts die besten Informationen widerspiegelt.