nodejsはCommon JSとAMDを勉強します.


モジュール設計、モジュール化システムに必要な能力: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には、モジュールをロードするための大域的な方法があります.数学モジュールがあると仮定して、下記のようにロードできます.
    var math = require('math');
    //  ,            :
    var math = require('math');
    math.add(2,3); // 5
    AMD
    Common 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