2017-10-26 3 views
0

Ich habe kürzlich gelesen: "ECMAScript 6-Module müssen unabhängig davon funktionieren, ob die Engine Module synchron (z. B. auf Servern) oder asynchron (z. B. in Browsern) lädt."Warum laden JS-Module in einem Browser anders als in einem Server (async & sync)?

Warum sollte JS asynchron und synchron laden, in einem Server gegenüber einem Browser? Ist das beabsichtigt?

+1

Auf einem Server werden Moduldateien aus einem Dateisystem geladen (schnell), während sie in einem Browser über ein Netzwerk geladen werden (langsamer, daher kann es vorteilhaft sein, sie asynchron zu laden, statt die Seite hängen zu lassen Netzwerk holen). Ist das die Antwort, die Sie suchen, oder etwas technischeres, z. B. welche APIs oder Code tatsächlich verwendet wird, um eine Ladung auszuführen? – apsillers

+0

Der Server hat direkten Zugriff auf das Dateisystem und lädt die Module direkt von der Festplatte. Es benötigt keine Asynchronität, da es ohnehin nur durch die Geschwindigkeit der Hardware begrenzt ist. Auf der anderen Seite sind Browser durch die Netzwerkgeschwindigkeit stark eingeschränkt. Sie können es sich nicht leisten, die Benutzeroberfläche ständig zu blockieren, da sie darauf warten, dass eine Datei geladen wird, sodass sie asynchron arbeiten müssen. –

+0

@ JeremyThille gibt es einen Grund, warum Server nicht asynchron laden? Es scheint, als würde es nicht wehtun. Ich versuche den Kompromiss zwischen den beiden zu verstehen. –

Antwort

2

Server bevorzugen es, Module synchron zu importieren, da sie schnell aus dem Dateisystem geladen werden. Im Allgemeinen ist synchroner Code einfacher zu schreiben und zu lesen. Es ist toll, in Knoten in der Lage sein, zu tun:

var myModule = require("mymodule"), 
    foo = require("foo"); 
myModule.doThing(foo); 

statt

require("mymodule", function(err, myModule) { 
    require("foo", function(err, foo) { 
     myModule.doThing(foo); 
    }); 
}); 

Im Gegensatz dazu ist asynchroner Code häufig bevorzugt in einem Browser, da ein Netzlast eine längere Zeit und synchrone Ausführung Blöcke nehmen die Benutzeroberfläche. Es ist vorzuziehen, den Thread des Browsers frei zu lassen, um auf den Benutzer zu reagieren (und Ladeanimationen usw. anzuzeigen), während Module im Hintergrund ruhig geladen werden und asynchron auf ihre Beendigung reagiert wird.

Verwandte Themen