簡(jiǎn)單理解commonjs、AMD、CMD

相同點(diǎn):三者都是為了實(shí)現(xiàn)javascript模塊化而產(chǎn)生的規(guī)范。
不同點(diǎn):

  • commonjs是隨著nodejs的火而火起來(lái)的,nodejs采用了commonjs規(guī)范,實(shí)現(xiàn)了(require、exports、module)等。

  • AMD 最好的實(shí)現(xiàn)模塊化的方式是實(shí)現(xiàn)前后端統(tǒng)一的標(biāo)準(zhǔn),無(wú)奈,commonjs并不適用于瀏覽器。比如:在后端使用
    {
    var math = require('math');
    math.add(2, 3);
    }
    在加載完成math.js模塊之后,可以計(jì)算2+3,但是若是在前端使用,由于同步加載過(guò)程中,可能會(huì)造成瀏覽器“假死”的狀態(tài),不利用用戶的體驗(yàn),所以異步加載規(guī)范AMD誕生。其中的應(yīng)用實(shí)例是require.js。

  • CMD 是在Sea.js中逐漸火起來(lái),推崇的是as lazy as possible。

AMD 和 CMD的主要區(qū)別

1: 對(duì)于依賴的模塊,AMD是提前執(zhí)行,CMD是延遲執(zhí)行。不過(guò)從require.js2.0起,AMD也實(shí)現(xiàn)延遲執(zhí)行(寫法不同,執(zhí)行方式不同),CMD思想是as lazy as possible.
2: AMD推崇依賴前置,CMD推崇依賴就近。代碼如下

  //AMD
  define(['./a', './b'], function(a, b){
      a.doSomething();
      ......
      b.doSomething();
  })

  //CMD
  define(function(require, exports, module){
    var a = require('./a');
    a.doSomething();
    ......
    var b = require('./b');
    b.doSomething();
  })

3: AMD的API默認(rèn)的是一個(gè)當(dāng)多個(gè)用,CMD比較嚴(yán)格,指責(zé)單一。

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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