隨着JS模塊化編程的發展,處理模塊之間的依賴關係成爲了維護的關鍵。javascript
AMD,CMD,CommonJS是目前最經常使用的三種模塊化書寫規範。html
CommonJS規範是誕生比較早的。NodeJS就採用了CommonJS。是這樣加載模塊:java
var clock = require('clock'); clock.start();
這種寫法適合服務端,由於在服務器讀取模塊都是在本地磁盤,加載速度很快。可是若是在客戶端,加載模塊的時候有可能出現「假死」情況。好比上面的例子中clock的調用必須等待clock.js請求成功,加載完畢。那麼,能不能異步加載模塊呢?編程
AMD,即 (Asynchronous Module Definition),這種規範是異步的加載模塊,requireJs應用了這一規範。先定義全部依賴,而後在加載完成後的回調函數中執行:服務器
require([module], callback);
用AMD寫上一個模塊:異步
require(['clock'],function(clock){ clock.start(); });
AMD雖然實現了異步加載,可是開始就把全部依賴寫出來是不符合書寫的邏輯順序的,能不能像commonJS那樣用的時候再require,並且還支持異步加載後再執行呢?async
CMD (Common Module Definition), 是seajs推崇的規範,CMD則是依賴就近,用的時候再require。它寫起來是這樣的:模塊化
define(function(require, exports, module) { var clock = require('clock'); clock.start(); });
AMD和CMD最大的區別是對依賴模塊的執行時機處理不一樣,而不是加載的時機或者方式不一樣,兩者皆爲異步加載模塊。
AMD依賴前置,js能夠方便知道依賴模塊是誰,當即加載;而CMD就近依賴,須要使用把模塊變爲字符串解析一遍才知道依賴了那些模塊,這也是不少人詬病CMD的一點,犧牲性能來帶來開發的便利性,實際上解析模塊用的時間短到能夠忽略。函數
以上就是三者的異同,若有疑問或建議,請參考如下文章或聯繫我,謝謝。性能
以上來自轉載,本人只是爲了學習方便,若有侵權,聯繫必刪,在此致敬大牛!!!
轉載自 http://www.jianshu.com/p/09ffac7a3b2c