CommonJS AMD require.js

2009年,美國程序員Ryan Dahl創造了node.js項目,將javascript語言用於服務器端編程。這標誌"Javascript模塊化編程"正式誕生。javascript

在CommonJS中,有一個全局方法require()用於加載模塊,如數學模塊math.js  var math = require("math"); math.add(2,3);// 5java

這種方式加載模塊在瀏覽器環境有嚴重問題,就是代碼在require()處阻塞,模塊都放在服務器端,可能阻塞很長時間,取決於網絡環境。但對服務器端不是問題,由於模塊都在服務器本地,能夠同步加載,只需等待硬盤讀取時間node

所以,瀏覽器端的模塊,不能使用同步加載,須要異步加載,AMD應運而生程序員

AMD全稱Asynchronous Module Definition,即異步模塊定義,採用異步方式加載模塊,模塊的加載不影響後面語句的執行, 全部依賴這個模塊的語句,都定義在一個回調函數中,等到加載完成以後,回調函數纔會執行編程

AMD也採用require(),但須要兩個參數require([module],callback),第一個參數是數據,裏面放入要加載的模塊,第二個參數是加載成功後的回調函數數組

  require(["math"],function(math){math.add(2,3)});瀏覽器

  math加載與math.add()不是同步的,瀏覽器不會假死,更適合瀏覽器環境服務器

require.js加載的模塊,採用AMD規範。也就是說,模塊必須按照AMD的規定來寫。具體來講,就是模塊必須採用特定的define()函數來定義。若是一個模塊不依賴其餘模塊,那麼能夠直接定義在define()函數之中。網絡

  例如math.js模塊:異步

  // math.js

  define(function (){

    var add = function (x,y){

      return x+y;

    };

    return {

      add: add
    };

  });

  若是這個模塊還依賴其餘模塊,那麼define()函數的第一個參數,必須是一個數組,指明該模塊的依賴性。

   define(['myLib'], function(myLib){

    function foo(){

      myLib.doSomething();

    }

    return {

      foo : foo

    };

  });

相關文章
相關標籤/搜索