AMD 與 CMD 區別到底在哪裏?

模塊化是指在解決某一個複雜問題或者一系列的雜糅問題時,依照一種分類的思維把問題進行系統性的分解以之處理。模塊化是一種處理複雜系統分解爲代碼結構更合理,可維護性更高的可管理的模塊的方式。可以想象一個巨大的系統代碼,被整合優化分割成邏輯性很強的模塊時,對於軟件是一種何等意義的存在。對於軟件行業來說:解耦軟件系統的複雜性,使得不管多麼大的系統,也可以將管理,開發,維護變得“有理可循”。

還有一些對於模塊化一些專業的定義爲:模塊化是軟件系統的屬性,這個系統被分解爲一組高內聚,低耦合的模塊。那麼在理想狀態下我們只需要完成自己部分的核心業務邏輯代碼,其他方面的依賴可以通過直接加載被人已經寫好模塊進行使用即可。

首先,既然是模塊化設計,那麼作爲一個模塊化系統所必須的能力:

   1. 定義封裝的模塊。

   2. 定義新模塊對其他模塊的依賴。

   3. 可對其他模塊的引入支持。

 

AMD CMD 區別到底在哪裏?

 下面是玉伯對於 AMD CMD 區別的解釋:

 

   AMD RequireJS 在推廣過程中對模塊定義的規範化產出。

   CMD SeaJS 在推廣過程中對模塊定義的規範化產出。

 

   類似的還有 CommonJS Modules/2.0 規範,是 BravoJS 在推廣過程中對模塊定義的規範化產出還有不少??

 

   這些規範的目的都是爲了 JavaScript 的模塊化開發,特別是在瀏覽器端的。

    目前這些規範的實現都能達成瀏覽器端模塊化開發的目的。

 

    區別:

 

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

   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()

   // ...

})

 

雖然 AMD 也支持 CMD 的寫法,同時還支持將 require 作爲依賴項傳遞,但 RequireJS 的作者默認是最喜歡上面的寫法,也是官方文檔裏默認的模塊定義寫法。

   3. AMD API 默認是一個當多個用,CMD API 嚴格區分,推崇職責單一。比如 AMD 裏,require 分全局 require 和局部 require,都叫 requireCMD 裏,沒有全局 require,而是根據模塊系統的完備性,提供 seajs.use 來實現模塊系統的加載啓動。CMD 裏,每個 API 都簡單純粹。

   4. 還有一些細節差異,具體看規範的定義就好。

另外,SeaJS RequireJS 的差異,可以參考:https://github.com/seajs/seajs/issues/277


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章