Wenn ich an der Leistungssteigerung interessiert bin, kann der zweite Block schneller ausgeführt werden?
Da die Skripte heruntergeladen und asynchron ausgeführt werden, wird die Ladezeit der Seite reduziert.
Der Autor der Script-injected "async scripts" considered harmful vergleicht drei Methoden zum Einbinden eines Skripts: ein injiziertes Skript, ein blockierendes Skript und ein Skript mit dem Attribut async
. Das Ergebnis ist:
script execution onload
----------------- ------------------ --------
script-injected ~3.7s ~3.7s
blocking script ~2.7s ~2.7s
async attribute ~1.7s ~2.7s
Wie Sie sehen, das async
Attribut bietet die beste Leistung. Wenn die Ausführungsreihenfolge der Skripts keine Rolle spielt, sollten Sie sie unbedingt verwenden.
Wie für Ihre Titelfrage:
Do-Browser ausführen Skripte in einem einzigen Thread geladen?
Ja, weil JavaScript single-threaded ist, aber in Bezug auf die Leistung spielt es keine Rolle. Das Herunterladen eines Skripts dauert viel länger als das tatsächliche Ausführen. Daher sollten Sie sich auf die Optimierung des Download-Teils konzentrieren.
Ich habe einen Test gemacht. Ich habe ein einfaches Skript:
for (var i = 0; i < 1e8; i++);
ich das gleiche Skript in zwei Dateien setzen, test1.js
und test2.js
.Dann machte ich zwei HTML-Dateien, die erste ohne async
und die zweite mit:
test1.html
:
<!DOCTYPE html>
<script src="test1.js"></script>
<script src="test2.js"></script>
test2.html
:
<!DOCTYPE html>
<script src="test1.js" async></script>
<script src="test2.js" async></script>
Dann öffnete ich diese HTML-Dateien in meinem Browser und überprüft Timeline Registerkarte in Chrome DevTools:
test1.html
:
test2.html
:
Wie Sie Skripte in beiden Fällen sehen, werden asynchron nicht ausgeführt.
Siehe auch: Is JavaScript guaranteed to be single-threaded?.
Muss noch etwas getestet werden? –
Ich denke, dass die Zeit für die gesamte Ausführung in beiden Methoden gleich sein wird, aber im 'asynchronen' können wir die wichtigen Daten wie HTML schneller zeigen. Das ist absolut meine Meinung. –