AMD和CMD的區別

2022-08-11 18:42:09 字數 1078 閱讀 8114

有必要簡單提一下兩者的主要區別,cmd推崇依賴就近,可以把依賴寫進你的**中的任意一行,例:

define(

function

(require, exports, module) )

**在執行時,首先是不知道依賴的,需要遍歷所有的require關鍵字,找出後面的依賴。具體做法是將function tostring後,用正則匹配出require關鍵字後面的依賴。顯然,這是一種犧牲效能來換取更多開發便利的方法。

而amd是依賴前置的,換句話說,在解析和執行當前模組之前,模組作者必須指明當前模組所依賴的模組,表現在require函式的呼叫結構上為:

define(['./a','./b'],function

(a,b))

**在一旦執行到此處,能立即知曉依賴。而無需遍歷整個函式體找到它的依賴,因此效能有所提公升,缺點就是開發者必須顯式得指明依賴——這會使得開發工作量變大,比如:當你寫到函式體內部幾百上千行的時候,忽然發現需要增加乙個依賴,你不得不回到函式頂端來將這個依賴新增進陣列。

細心的讀者可能發現,到目前位置我討論的amd和cmd的思想的關於依賴的部分,都只討論的「硬依賴」,也就是執行前肯定需要的依賴,但是這不是全部的情況。有的時候情況是這樣的:

//函式體內:

if(status)

在這個函式體內,可能依賴a,也可能不依賴a,我把這種可能的依賴成為「軟依賴」。對於軟依賴當然可以直接當硬依賴處理,但是這樣不經濟,因為依賴是不一定的,有可能載入了此處的依賴而實際上沒有用上。

//函式體內:

if(status))

}至此可以對由commonjs衍生出來的方案做出總結了。在瀏覽器端來設計模組載入機制,需要考慮依賴的問題。

我們先把依賴分為兩種,「強依賴」 —— 肯定需要 和「弱依賴」 —— 可能需要。

對於強依賴,如果要效能優先,則考慮參照依賴前置的思想設計你的模組載入器,我個人也更推崇這個方案一些;如果考慮開發成本優先,則考慮按照依賴就近的思想設計你的模組載入器。

對於弱依賴,只需要將弱依賴的部分改寫到**函式內即可。

如果現在我要實現乙個模組載入器,我會將強依賴前置,弱依賴採用非同步**函式的形式,其它的方法我認為都只是語法糖而已,僅此就夠了。

AMD和CMD的區別

關於這兩個的區別網上可以搜出一堆文章,簡單總結一下 最明顯的區別就是在模組定義時對依賴的處理不同 1 amd推崇依賴前置,在定義模組的時候就要宣告其依賴的模組 2 cmd推崇就近依賴,只有在用到某個模組的時候再去require 這種區別各有優劣,只是語法上的差距,而且requirejs和seajs都...

初識AMD和CMD模組化

今天發現了阮一峰大牛的部落格,收藏一下裡邊有好多文章值得讀哦 amd asynchronus module definition 非同步模組定義 語法 define id dependents factory amd 是 requirejs 在推廣過程中對模組定義的規範化產出。amd規範 cmd c...

JS 模組化AMD和CMD

函式封裝 物件 立即執行函式 模組化規範 是一種專案的構架模式,這種構架模式讓js 重用性變得非常高,讓專案構架的一些複雜問題全部得以解決。例如,多個script標籤不會再出現了,我們只要用乙個script標籤進行引入就可以了。模組化那有兩個規範,amd規範和cmd規範,當然還有針對於nodejs後...