有必要簡單提一下兩者的主要區別:
1、cmd推崇依賴就近,可以把依賴寫進你的**中的任意一行,例:
define(function(require, exports, module) )
**在執行時,首先是不知道依賴的,需要遍歷所有的require關鍵字,找出後面的依賴。具體做法是將function tostring後,用正則匹配出require關鍵字後面的依賴。顯然,這是一種犧牲效能來換取更多開發便利的方法。
2、而amd是依賴前置的,換句話說,在解析和執行當前模組之前,模組作者必須指明當前模組所依賴的模組,表現在require函式的呼叫結構上為:
define(['./a','
./b'
],function(a,b))
**在一旦執行到此處,能立即知曉依賴。而無需遍歷整個函式體找到它的依賴,因此效能有所提公升,缺點就是開發者必須顯式得指明依賴——這會使得開發工作量變大,比如:當你寫到函式體內部幾百上千行的時候,忽然發現需要增加乙個依賴,你不得不回到函式頂端來將這個依賴新增進陣列。
細心的讀者可能發現,到目前我討論的amd和cmd的思想的關於依賴的部分,都只討論的「硬依賴」,也就是執行前肯定需要的依賴,但是這不是全部的情況。有的時候情況是這樣的:
//函式體內:
if(status)
在這個函式體內,可能依賴a,也可能不依賴a,我把這種可能的依賴成為「軟依賴」。對於軟依賴當然可以直接當硬依賴處理,但是這樣不經濟,因為依賴是不一定的,有可能載入了此處的依賴而實際上沒有用上。
對於軟依賴的處理,我推薦依賴前置+**函式的實現形式。上面的例子簡單表述如下:
//函式體內:
if(status))
}
至此可以對由commonjs衍生出來的方案做出總結了。在瀏覽器端來設計模組載入機制,需要考慮依賴的問題。
我們先把依賴分為兩種,「強依賴」 —— 肯定需要 和「弱依賴」 —— 可能需要。
對於強依賴,如果要效能優先,則考慮參照依賴前置的思想設計你的模組載入器,我個人也更推崇這個方案一些;如果考慮開發成本優先,則考慮按照依賴就近的思想設計你的模組載入器。
對於弱依賴,只需要將弱依賴的部分改寫到**函式內即可。
如果現在我要實現乙個模組載入器,我會將強依賴前置,弱依賴採用非同步**函式的形式,其它的方法我認為都只是語法糖而已,僅此就夠了。
CHIPSeq的原理和應用
染色質免疫共沉澱技術 chipseq,也稱結合位點分析法,是研究體內蛋白質與相互作用的有力工具,通常用於轉錄因子結合位點或組蛋白特異性修飾位點的研究。將與第二代測序技術相結合的技術,能夠高效地在全基因組範圍內檢測與組蛋白 轉錄因子等互作的區段。chipseq的原理是 首先通過染色質免疫共沉澱技術 特...
mybaits的原理和應用
是乙個orm框架。建立 物件 protected t newinstance public class implements invocationhandler serializable override public object invoke object proxy,method method...
應用 原生應用和混合應用的區別
最近原生應用 web應用 混合應用的名字讓我們聽得比較熟悉了,現在我們就通過評析各種應用的優缺點來更進一步看看這三者的區別。一.原生應用 你使用過微軟powerpoint 或者 word吧?這些可直接在你電腦上執行或者在智慧型手機上執行,簡單來說,原生應用是特別為某種作業系統開發的,比如ios an...