1. 程式人生 > >淺析JS模塊規範:AMD,CMD,CommonJS

淺析JS模塊規範:AMD,CMD,CommonJS

狀況 順序 淺析 ports params for 上一個 合服 log

from:https://www.jianshu.com/p/09ffac7a3b2c

隨著JS模塊化編程的發展,處理模塊之間的依賴關系成為了維護的關鍵。


技術分享圖片 模塊化

AMD,CMD,CommonJS是目前最常用的三種模塊化書寫規範。

CommonJS

CommonJS規範是誕生比較早的。NodeJS就采用了CommonJS。是這樣加載模塊:

var clock = require(‘clock‘);
clock.start();

這種寫法適合服務端,因為在服務器讀取模塊都是在本地磁盤,加載速度很快。但是如果在客戶端,加載模塊的時候有可能出現“假死”狀況。比如上面的例子中clock的調用必須等待clock.js請求成功,加載完畢。那麽,能不能異步加載模塊呢?

AMD

AMD,即 (Asynchronous Module Definition),這種規範是異步的加載模塊,requireJs應用了這一規範。先定義所有依賴,然後在加載完成後的回調函數中執行:

require([module], callback);

用AMD寫上一個模塊:

require([‘clock‘],function(clock){
  clock.start();
});

AMD雖然實現了異步加載,但是開始就把所有依賴寫出來是不符合書寫的邏輯順序的,能不能像commonJS那樣用的時候再require,而且還支持異步加載後再執行呢?

CMD

CMD (Common Module Definition), 是seajs推崇的規範,CMD則是依賴就近,用的時候再require。它寫起來是這樣的:

define(function(require, exports, module) {
   var clock = require(‘clock‘);
   clock.start();
});

AMD和CMD最大的區別是對依賴模塊的執行時機處理不同,而不是加載的時機或者方式不同,二者皆為異步加載模塊。
AMD依賴前置,js可以方便知道依賴模塊是誰,立即加載;而CMD就近依賴,需要使用把模塊變為字符串解析一遍才知道依賴了那些模塊,這也是很多人詬病CMD的一點,犧牲性能來帶來開發的便利性,實際上解析模塊用的時間短到可以忽略。

以上就是三者的異同,如有疑問或建議,請參考以下文章或聯系我,謝謝。

</br></br>



作者:乘著風
鏈接:https://www.jianshu.com/p/09ffac7a3b2c
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

淺析JS模塊規範:AMD,CMD,CommonJS