AMDとCMDとCommon JSの違い

2225 ワード

Common JSCommonJSは、サーバ及びデスクトップ環境において、Node.JSCommonJSの仕様CommonJSに準拠しているような、ブラウザ環境以外にJavaScript生態系を構築することを目的として生成されたプロジェクトであり、JavaScriptの作用領域問題を解決するために規定されたモジュール形態であり、各モジュールに自身の名前空間で実行させることができる.この仕様の主な内容は、モジュールがmodule.exportsを介して外部変数またはインターフェースを導出し、require()を介して他のモジュールの出力を現在のモジュールの機能領域に導入しなければならないことである.例を挙げて説明します
var clock = require('clock');
clock.start();
CommonJSは同期ローディングモジュールである.
AMDCommonJS仕様に基づくnodeJSが出てきたら、サービス端末のモジュール概念が形成されています.自然にクライアントモジュールが欲しいです.そして、できれば両方の互換性があります.一つのモジュールは変更せずにサーバーとブラウザで実行できます.しかし、重大な制限のため、CommonJS仕様はブラウザ環境に適用されない.上のコードをクライアントブラウザで実行するとエラーが発生します.
上記のrequire方法は同期されている.これはサーバー側の問題ではありません.すべてのモジュールがローカルハードディスクに保存されていますので、同時にロードが完了します.待ち時間はハードディスクの読み込み時間です.しかし、ブラウザについては、これは大きな問題です.モジュールはサーバーの端に置いています.待ち時間はネットの速度によって遅くなります.長い間待つかもしれません.ブラウザは「仮死」状態にあります.
したがって、ブラウザ側のモジュールは、「同期ローディング」を使用することができず、「非同期ローディング」しか採用できません.これがAMD規格の誕生の背景です.
CommonJSは主にJSのバックエンドでのパフォーマンスのために制定されています.彼は先端に合わないです.AMDが現れました.それは主に先端JSの表現のために規範を作ります.AMDAsynchronous Module Definitionの略語で、「非同期モジュール定義」という意味です.モジュールを非同期的にロードします.モジュールのロードは、後のステートメントの動作に影響しません.このモジュールに依存するすべてのステートメントは、ロードが完了するまで一つのコールバック関数で定義されます.AMDrequire()文ローディングモジュールを採用しているが、CommonJSとは異なり、2つのパラメータが要求される.
require([module], callback);

require(['clock'],function(clock){
  clock.start();
});
requireJsAMD仕様の実装である.
CMDCMD(Common Module Definition)は、seajs推賞の仕様であり、CMDは近くに依存し、使う時はrequireとする.これは次のように書きます.
define(function(require, exports, module) {
   var clock = require('clock');
   clock.start();
});
AMDおよびCMDの最大の違いは、ロードのタイミングまたは方法が異なる代わりに、依存モジュールの実行タイミング処理に対して異なることであり、両方とも非同期ローディングモジュールである.AMDはフロントエンドに依存し、jsは依存モジュールが誰であるかを知りやすく、すぐにローディングすることができる.CMDは近くに依存しています.モジュールを文字列に変えて解析して初めてそれらのモジュールに依存していることが分かります.
参考記事:http://www.jianshu.com/p/09ffac7a3b2c