2016-06-11 5 views
0

は私がSystemJSまたはいくつかの他のモジュールローダを使用する場合ECMA6モジュールシステムは、ダウンロードされた生コードの量を減らしますか?

//------ 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 

、それが唯一の正方形のためのJSをダウンロードしない...私は、次の例があると?またはdiagを含むファイル全体をダウンロードしますか? SystemJSはクライアントサイドにロードされているので、どのように動作するのか混乱しています。より多くのTCP要求を作成し、少し遅くなるのではないでしょうか?

このモジュールパターンに切り替えると、サイズが小さくなり(要求、帯域幅など)、次に縮小され連結されたJSファイルが作成されることに少し混乱します。

+1

ファイルを分割できるサーバサイドモジュールサービングシステムを使用しない限り、これは不可能です。 – Bergi

答えて

1

モジュールシステム(任意のモジュールシステム)は、部分ファイルをダウンロードできません。それは、ファイル全体をダウンロードして完全に解析し、ローダの機能と実装に応じて、必要なものだけを使うようにメモリのフットプリントを減らすかもしれません。

帯域幅を小さくしました&要求はクライアントキャッシュの結果です。連結して縮小すると、いくつかのページに存在するモジュールは完全に連結されたスクリプトに組み込まれているため、すべてキャッシュされません。

+0

実際にそれをもう一度読んで、私はあなたが言っていることは、あなたがホストする必要のあるものだけを連結していれば、キャッシュは両方のページで異なるということです。私たちの古いアプローチは、ブラウザに特定のjsファイルをキャッシュさせるために、すべてのページ(使用済みかどうか)のすべてのコードを連結して提供することでした。私はクライアント側のキャッシュはこれらの要求のいくつかを排除することができますが、私はそれが100の代わりにキャッシュして1つのファイルをホストする方が良いのかどうかまだ疑問に思う。複数のドメインが同じjsファイルを持ち、それらをまたぐ。 – Jackie

+0

また、TLDRを追加します。 – Jackie

+0

モジュールローダは、モジュールのダウンロード、解析、コンパイルにストリーミングを使用し、必要な部品がロードされた後に停止することができます(推測モジュールの残りの部分には構文エラーが含まれていないことに注意してください)。しかし、そうですね、ES6モジュールはこの推測を難しくし、System.jsはこのようなアプローチを絶対に使用しません。 – Bergi