前端隨心記---------AMD和CMD規范的區別


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

  模塊化的作用有以下這些:

  • 可以解決命名沖突
  • 管理依賴
  • 提高代碼的可讀性
  • 代碼解耦,提高代碼的復用性

 

AMD(異步執行) 是 RequireJS 在推廣過程中對模塊定義的規范化產出。
CMD (同步執行)是 SeaJS 在推廣過程中對模塊定義的規范化產出。

這些規范的目的都是為了 JavaScript 的模塊化開發,特別是在瀏覽器端的。
目前這些規范的實現都能達成瀏覽器端模塊化開發的目的。

瀏覽器不兼容CommonJS(http://wiki.commonjs.org/wiki/Modules/1.1)的根本原因,也正是在於缺少四個Node.js環境的變量。

  • module
  • exports
  • require
  • global

 

2.AMD規范

        AMD是"Asynchronous Module Definition"的縮寫,意思就是"異步模塊定義"。它采用異步方式加載模塊,模塊的加載不影響它后面語句的運行。所有依賴這個模塊的語句,都定義在一個回調函數中,等到加載完成之后,這個回調函數才會運行。

  AMD也采用require()語句加載模塊,但是不同於CommonJS,它要求兩個參數:

  require([module], callback);

  第一個參數[module],是一個數組,里面的成員就是要加載的模塊;第二個參數callback,則是加載成功之后的回調函數。

 

 

 

 

 

3.CMD規范

cmd的全稱是Common Module Definition,即通用模塊定義,其提供了模塊定義和按需加載執行模塊。該規范明確了模塊的基本書寫格式和基本的交互規則。

在 CMD 規范中,一個模塊就是一個文件。代碼的書寫格式如下:

define(factory);

  這里的define是一個全局函數,用來定義模塊,這里的factory參數既可以是函數,又可以是字符串或對象

 

 

 

4.兩者區別

AMD 通過 require.js實現 
CMD 通過 sea.js實現

1. 對於依賴的模塊,AMD 是提前執行,CMD 是延遲執行。不過 RequireJS 從 2.0 開始,也改成可以延遲執行(根據寫法不同,處理方式不同)。CMD 推崇 as lazy as possible.

2. CMD 推崇依賴就近,AMD 推崇依賴前置。看代碼:

// CMD
define(function(require, exports, module) {
var a = require('./a')
a.doSomething()
// 此處略去 100 行
var b = require('./b') // 依賴可以就近書寫
b.doSomething()
// ... 
})

// AMD 默認推薦的是
define(['./a', './b'], function(a, b) { // 依賴必須一開始就寫好
a.doSomething()
// 此處略去 100 行
b.doSomething()
...
})

 

可供參考:https://www.imooc.com/article/19828

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM