nodejsはCommon JSとAMDを勉強します.
3508 ワード
モジュール設計、モジュール化システムに必要な能力:1.パッケージを定義するモジュール.2.他のモジュールに対する新しいモジュールの依存性を定義します.3.他のモジュールへの導入サポートが可能です.
Common JS
CommonJSは本質的には標準的な実装を提供していないが、JavaScriptライブラリ、フレーム、環境…これらのAPIの定義を実現するために必要です.どのようなAPIレベルの定義がありますか?1.Uniform Baseline/Globals(discussion)
2.Modules(1.1.1)binary:Binary Data Objecs(byte arrays and/or strigs) encodings:Enccodings and character sets io:I/O Streams fs、fs-base:Filesystem(proposals、discussion、early implements) system Interface(stdin,stdout,stder,&c)(1.0,amendments proposed) asert、test:Unit Testing(1.0、amendment proposals pending) sockets:Socket I/O TCP/IP sockets(early proposals) event-queue:Reactor Reactor/Event Que(early proposals) ワーカー:ワーカー・ウォーカー(concurrent shared nothing process/thread) consone:consolie 3.Packages(1.0)
4.Package Mappings(proposal)
5.Web Server Gateway Interface(JSGI)
6.Promises(proposal)
modulesは、バイナリ、コード、IO、ファイル、システム、断言テスト、ソケット、イベントキュー、Worker、コンソールなどの実現に関連しています.伝統的なJavaScriptの空白を補います.
Common JS定義のモジュールは、{モジュール参照}{モジュール定義}{モジュール識別子}に分けられ、外部モジュールの導入に用いられます.exportオブジェクトは、現在のモジュールの方法または変数を導出するために使用され、唯一の出口です.moduleオブジェクトはモジュール自体を表します.
node.jsのモジュールシステムは、Common JS仕様を参照して実現されます.Common JSには、モジュールをロードするための大域的な方法があります.数学モジュールがあると仮定して、下記のようにロードできます.
Common JS仕様はブラウザ環境には適用されません.前のコードですか?ブラウザで実行すれば、大きな問題があります.分かりますか?
AMDは「Aynchronous Module Definition」の略語で、「非同期モジュール定義」という意味です.モジュールを非同期的にロードします.モジュールのロードは、後のステートメントの動作に影響しません.このモジュールに依存するすべてのステートメントは、ロードが完了するまで一つのコールバック関数で定義されます.
AMDはrequire()の語句を用いてモジュールをロードしますが、Common JSとは異なり、二つのパラメータが必要です.
参考文献:1.wiki-Common JS
Common JS
CommonJSは本質的には標準的な実装を提供していないが、JavaScriptライブラリ、フレーム、環境…これらのAPIの定義を実現するために必要です.どのようなAPIレベルの定義がありますか?1.Uniform Baseline/Globals(discussion)
2.Modules(1.1.1)
4.Package Mappings(proposal)
5.Web Server Gateway Interface(JSGI)
6.Promises(proposal)
modulesは、バイナリ、コード、IO、ファイル、システム、断言テスト、ソケット、イベントキュー、Worker、コンソールなどの実現に関連しています.伝統的なJavaScriptの空白を補います.
Common JS定義のモジュールは、{モジュール参照}{モジュール定義}{モジュール識別子}に分けられ、外部モジュールの導入に用いられます.exportオブジェクトは、現在のモジュールの方法または変数を導出するために使用され、唯一の出口です.moduleオブジェクトはモジュール自体を表します.
node.jsのモジュールシステムは、Common JS仕様を参照して実現されます.Common JSには、モジュールをロードするための大域的な方法があります.数学モジュールがあると仮定して、下記のようにロードできます.
var math = require('math');
// , :
var math = require('math');
math.add(2,3); // 5
AMDCommon JS仕様はブラウザ環境には適用されません.前のコードですか?ブラウザで実行すれば、大きな問題があります.分かりますか?
var math = require('math');
math.add(2, 3);
第二行はmart.add(2,3)で、第一行はrequire(‘math’)の後に運行しますので、math.jsのロードが完了するまで待つ必要があります.つまり、ロード時間が長いとアプリケーション全体が止まって待つということです.これはサーバー側の問題ではありません.すべてのモジュールがローカルハードディスクに保存されていますので、同時にロードが完了します.待ち時間はハードディスクの読み込み時間です.しかし、ブラウザについては、これは大きな問題です.モジュールはサーバーの端に置いています.待ち時間はネットの速度によって異なります.長い間待つかもしれません.ブラウザは「仮死」の状態にあります.したがって、ブラウザ側のモジュールは、「同期ローディング」を採用することができず、「非同期ローディング」しか採用できません.これがAMD仕様の誕生の背景です.AMDは「Aynchronous Module Definition」の略語で、「非同期モジュール定義」という意味です.モジュールを非同期的にロードします.モジュールのロードは、後のステートメントの動作に影響しません.このモジュールに依存するすべてのステートメントは、ロードが完了するまで一つのコールバック関数で定義されます.
AMDはrequire()の語句を用いてモジュールをロードしますが、Common JSとは異なり、二つのパラメータが必要です.
require([module], callback);
最初のパラメータ[module]は、モジュールをロードするメンバーの配列です.二つ目のパラメータのcalbackは、ロード成功後のコールバック関数です.前のコードをAMD形式に書き換えると、次のようになります. require(['math'], function (math) {
math.add(2, 3);
});
math.add()はmathモジュールのローディングと同期していないので、ブラウザで仮死は発生しません.だから、AMDはブラウザ環境に適していることは明らかです.現在、主に2つのJavascriptライブラリがAMD仕様を実現しました.require.jsとcurl.js.参考文献:1.wiki-Common JS