CMD、AMD、commonJS

1.為什么要使用模塊化?

以為隨著代碼量的增大,會(huì)造成命名沖突、文件依賴和加載順序等問(wèn)題,有了模塊,我們就可以更方便地使用別人的代碼,想要什么功能,就加載什么模塊。
模塊化可以帶來(lái)很多好處:

  • 模塊的版本管理
  • 提高可維護(hù)性
  • 前端性能優(yōu)化
  • 跨環(huán)境共享模塊

2.CMD、AMD、CommonJS 規(guī)范分別指什么?有哪些應(yīng)用

  • commonJS:CommonJS是服務(wù)器端模塊的規(guī)范,Node.js采用了這個(gè)規(guī)范。Node.JS首先采用了js模塊化的概念。在CommonJS中,有一個(gè)全局性方法require(),用于加載模塊。假定有一個(gè)數(shù)學(xué)模塊math.js,就可以像下面這樣加載。
    <pre>
    var math = require('math')
    </pre>
    然后,就可以調(diào)用模塊提供的方法:
    <pre>
    var math = require('math')
    math.add(2,3)
    </pre>
    但是,由于一個(gè)重大的局限,使得CommonJS規(guī)范不適用于瀏覽器環(huán)境。還是上面的代碼,如果在瀏覽器中運(yùn)行,會(huì)有一個(gè)很大的問(wèn)題,第二行math.add(2, 3),在第一行require('math')之后運(yùn)行,因此必須等math.js加載完成。也就是說(shuō),如果加載時(shí)間很長(zhǎng),整個(gè)應(yīng)用就會(huì)停在那里等。造成頁(yè)面長(zhǎng)時(shí)間沒(méi)有響應(yīng),因此,瀏覽器端的模塊,不能采用“同步加載”,只能異步,這就是是AMD。
  • AMD:異步模塊定義,它采用異步方式加載模塊,模塊的加載不影響它后面語(yǔ)句的運(yùn)行。所有依賴這個(gè)模塊的語(yǔ)句,都定義在一個(gè)回調(diào)函數(shù)中,等到加載完成之后,這個(gè)回調(diào)函數(shù)才會(huì)運(yùn)行。requireJS,Dojo,jQuery采用了這個(gè)規(guī)范。AMD也采用require()語(yǔ)句加載模塊,但是不同于CommonJS,它要求兩個(gè)參數(shù):
    <pre>
    require ([module],callback);
    </pre>
    第一個(gè)參數(shù)[module]是一個(gè)數(shù)組,里面的成員就是加載的模塊,第二個(gè)參數(shù)callback,則是加載成功之后的回調(diào)函數(shù)。如果將前面的代碼改成AMD形式,則是:
    <pre>
    require(['math'],function(math){
    math.add(2,3);
    })
    </pre>
  • CMD:是 SeaJS推廣過(guò)程中產(chǎn)生的。在 CMD 規(guī)范中,一個(gè)模塊就是一個(gè)文件。與AMD類似,也是異步加載模塊,不過(guò)書(shū)寫規(guī)范不同。上述代碼用CMD的規(guī)范書(shū)寫則是:
    <pre>
    define(function(require,exports,module){
    var add = require('math').add;
    exports.increment = function(){
    return add(2,3);
    }
    })
    </pre>
    版權(quán)歸ENVY和饑人谷所有,轉(zhuǎn)載請(qǐng)注明出處。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容