2016-06-11 5 views
0

sagen, dass ich das folgende Beispiel habe ...Reduziert das ECMA6-Modulsystem den heruntergeladenen Rohcode?

//------ lib.js ------ 
export const sqrt = Math.sqrt; 
export function square(x) { 
    return x * x; 
} 
export function diag(x, y) { 
    return sqrt(square(x) + square(y)); 
} 

//------ main.js ------ 
import { square } from 'lib'; 
console.log(square(11)); // 121 

Wenn ich SystemJS oder einen anderen Modul-Lader verwendet wird, ist es nur die JS-Download für Platz? Oder lädt es die ganze Datei einschließlich diag herunter? Das SystemJS wird auf der Client-Seite geladen, so dass es mich verwirrt, wie das funktionieren würde. Würde es nicht mehr TCP-Anfragen erstellen und die Dinge etwas verlangsamen?

Ich bin ein wenig verwirrt, wie der Wechsel zu diesem Modulmuster eine kleinere Grundfläche (Anfragen, Bandbreite, etc) dann eine minimierte und concated JS-Datei erstellen wird.

+1

Sofern Sie kein serverseitiges Modul-Serving-System verwenden, das Dateien aufteilen kann, ist dies nicht möglich. – Bergi

Antwort

1

Ein Modulsystem (beliebig Modulsystem) kann Teildateien nicht herunterladen. Es wird die gesamte Datei herunterladen und vollständig analysieren, und je nach Loader-Funktionen und Implementierung kann es den Speicherbedarf reduzieren, um nur das zu verwenden, was benötigt wird.

Reduzierte Bandbreite & Anforderungen sind das Ergebnis des Client-Cache. Wenn Sie verketten und minimieren, werden Module, die auf mehreren Seiten vorhanden sind, nicht zwischengespeichert, weil sie in das vollständige verkettete Skript integriert sind.

+0

Wenn ich es noch einmal durchlese, denke ich, was du sagst, ist, dass, wenn du nur das zusammenführst, was gehostet werden muss, der Cache sich von beiden Seiten unterscheidet. Unser alter Ansatz bestand darin, den gesamten Code für alle Seiten (ob verwendet oder nicht) zu erstellen und bereitzustellen, damit der Browser unsere spezifische js-Datei zwischenspeichern konnte. Ich kann schätzen, dass clientseitige Zwischenspeicherung einige dieser Anfragen eliminieren kann, aber ich frage mich, ob es nicht besser ist, eine Datei anstatt 100 zu cachen und zu hosten. Ich könnte die Vorteile sehen, wenn mehrere Domänen dieselbe js-Datei haben und der Cache funktioniert über sie hinweg. – Jackie

+0

Fügen Sie auch eine TLDR hinzu Die Antwort ist nicht auf dem Client, wenn Sie nichts dagegen haben – Jackie

+0

Um fair zu sein, könnte ein Modullader * Streaming zum Herunterladen, Parsing und Kompilieren eines Moduls verwenden und aufhören, nachdem die notwendigen Teile geladen sind (spekulativ dass der Rest des Moduls keinen Syntaxfehler enthält), ähnlich wie Browser HTML heute analysieren. Aber Sie haben recht, ES6-Module machen diese Spekulation schwierig, und System.js verwendet definitiv keinen solchen Ansatz. – Bergi

Verwandte Themen