JavaScriptのモジュール化開発について

5980 ワード

一体何がモジュール化されていますか?
今はbackbone、emberjs、spinejs、batmanjsなどのMVCフレームに侵入してきました.Common JS、AMD、NodeJS、RequireJS、SeaJS、curljsなどのモジュール化されたJavaScriptが顔を出してきます.webの先端はすでに大きな先端に変化しており、webの先端の発展速度は速い.モジュール化は、システムを独立した機能部分に分離する方法であり、システムを独立した機能部分に分割し、モジュールインターフェース、モジュール間の透明性を厳格に定義することができる.javascriptのモジュールはC、PHP、javaの中でよく見られます.
  • cにincludeを使用して含む.hファイル.
  • phpにrequire_を使用します.onece包含.phpファイル
  • javaはimportを使ってパッケージを導入します.
  • モジュール化のメリットとデメリット
    利点:
    メンテナンス性1.フレキシブルアーキテクチャ、焦点分離2.モジュール間の組み合わせ、分解に便利3.単一モジュールの機能調整、アップグレードに便利4.複数人の協力が相互に干渉しないテスト性1.ユニット別テストが可能です.
    短所:
    性能損失1.システム階層で、呼び出しチェーンが長い2.モジュール間通信で、モジュール間でメッセージを送信すると、性能が消耗します.
    参照モジュールのいくつかの方法
    モジュールモード1.匿名のクローズド関数
    (function () {
        //         
        var name="xwk";
        var age="23";
        var say=function () {
            return name+"    "+age;
        };
        console.log(say())
    }());
    このような構造により、匿名関数は、親の役割領域であるグローバル内の変数にアクセスできないようにクローズドされています.利点は、グローバル変数を分離し、同名の汚染が発生しないことです.2.グローバル導入は上記の匿名クローズド関数と同じです.ただし、グローバル変数をパラメータとして関数に入力します.jqueryのパッケージはこのようになります.
    (function(globalVariable){
                  ...    
                      }
    (globalVariable))
    3.オブジェクトインターフェース
    var globalObj=(function () {
        return {
            func1:function () {
                return "r1";
            },
            func2:function () {
                return "r2";
            }
        }
    })();
    console.log(globalObj.func1())
    common JS&AMDモード
    1.com mmonJs
    CommunJSモジュールは、あるオブジェクトをエクスポートして、他のモジュールにrequire文で導入することができます.Node.jsを書いたらこれらの文法をよく知っているはずです.
    Common JSを通じて、各JSファイルは独立してそのモジュールの内容を格納します.このような作用領域では、対象をモジュールとしてmodule.export文で導出し、require文で導入します.
    function module1() {
        this.name=function () {
            return "xwk";
        };
        this.age=function () {
            return "23";
        }
    }
    module.exports = module1;
    引用するなら、requireだけが必要です.
    var m1=require("module1");
    var module1=new m1();
    module1.name();
    module1.age();
    この実装はモジュールモードより2つの利点があります.
  • グローバル名前空間汚染を避ける
  • コード間の依存関係を明確にする
  • 気をつけてcommmonJsモードを使って、サーバー優先のモードでモジュールを同期してロードします.もし3つのモジュールをロードするなら、この3つのモジュールは一つ一つ順番にロードします.欠点はブラウザ側にあまり友好的ではないです.彼がモジュールをロードしている限り、ページはモジュールロードが完了するまでずっと押さえられます.
    2.AMDモード
    CommunJSはもういいですが、もし私たちが非同期ローディングモジュールを実現したいなら、どうすればいいですか?答えはAynchronous Module Definition(非同期モジュール定義規範)です.AMDと略称します.
    AMDを通してモジュールのコードをロードすると、普通こう書きます.
    define(["module1","module2"],function(module1,module2){
       console.log(module.hello())
    });
    //define  ,               (     ,    , []  ),                   ,               
    これらのモジュール自体もdefineで宣言する必要があります.例えばmodule 1モジュール:
    define([],function(){
          return {
            func1:function () {
                return "r1";
            },
            func2:function () {
                return "r2";
            }
        }
     });
    非同期ローディング以外にも、AMDのもう一つの利点は、モジュール内でオブジェクト、関数、コンストラクション、文字列、JSONまたは他のデータタイプを使用することができますが、CommunJSはオブジェクトのみをサポートします.
    3.UMDモード
    UMDは二つの仕様を同時に使用する方法を作成し、グローバル変数定義もサポートします.したがって、UMDのモジュールは、クライアントとサービス端末で同時に使用することができる.私も使ったことがないので、ここで詳しく紹介しません.
    RequireJsフレームワーク
    RequireJSは非常に小さいJavaScriptモジュールのロードフレームであり、AMD仕様の最高の実現者の一つである.
    基本的なappi equireは3つの変数を定義します.define、require、requirejs、その中のrequire==requirejsは、requireを使うのが一般的です.
  • defineは名前からこのアプリがモジュール
  • を定義するために使われていることが分かります.
  • requireは依存モジュールをロードし、負荷完了後のコールバック関数
  • を実行する.
    明日はもっと続きます.