common js CMD/AMD 是什麼 和他們之間的聯繫區別

知道JS有模塊化開發的說法,也偶爾聽過requireJs,AMD,CMD等等名字,甚至使用node的時候,還用過require之類的方法,可是對這些一直沒有一個明確的認識和概念。想必這就是許多新手剛接觸這方面知識時的一個廣泛狀態。
其實僅僅作一些基礎的活兒的時候,並不須要對它們有太多的瞭解,知道怎麼用就好了,管他是什麼理念,是什麼實現呢。因而人就懶下來了。
終於有一天,下定決心,必定要把這一塊知識搞清楚,至少對此有個鮮明的認知,再也不那麼朦朦朧朧,A/C不分。
查了一些文章博客和知乎回答,發現大部分文章在某一部分上都會講的很詳細,太詳細了,卻又沒有一個連貫,我以爲這不太適合我這樣情況的新手,至少我所以多花了很多時間,而我寫這篇文章就是但願和我同樣有此困惑的新手能快速瞭解這幾個標準,作到若是不是想深刻,讀完我總結的幾個知識點,各位應該是能夠不用再查找其餘文章了的。
 
知識點1:AMD/CMD/CommonJs是JS模塊化開發的標準,目前對應的實現是RequireJs/SeaJs/nodeJs.
 
知識點2:CommonJs主要針對服務端,AMD/CMD主要針對瀏覽器端,因此最容易混淆的是AMD/CMD。(順便提一下,針對服務器端和針對瀏覽器端有什麼本質的區別呢?服務器端通常採用同步加載文件,也就是說須要某個模塊,服務器端便停下來,等待它加載再執行。這裏若是有其餘後端語言,如java,經驗的‘玩家’應該更容易理解。而瀏覽器端要保證效率,須要採用異步加載,這就須要一個預處理,提早將所須要的模塊文件並行加載好。)
 
知識點3 : AMD/CMD區別,雖然都是並行加載js文件,但仍是有所區別,AMD是預加載,在並行加載js文件同時,還會解析執行該模塊(由於還須要執行,因此在加載某個模塊前,這個模塊的依賴模塊須要先加載完成);而CMD是懶加載,雖然會一開始就並行加載js文件,可是不會執行,而是在須要的時候才執行。
 
知識點4:AMD/CMD的優缺點.一個的優勢就是另外一個的缺點, 能夠對照瀏覽。
                AMD優勢:加載快速,尤爲遇到多個大文件,由於並行解析,因此同一時間能夠解析多個文件。
                AMD缺點:並行加載,異步處理,加載順序不必定,可能會形成一些困擾,甚至爲程序埋下大坑。
 
                CMD優勢:由於只有在使用的時候纔會解析執行js文件,所以,每一個JS文件的執行順序在代碼中是有體現的,是可控的。
                CMD缺點:執行等待時間會疊加。由於每一個文件執行時是同步執行(串行執行),所以時間是全部文件解析執行時間之和,尤爲在文件較多較大時,這種缺點尤其明顯。
 
知識點5:如何使用?CommonJs的話,由於nodeJs就是它的實現,因此使用node就行,也不用引入其餘包。AMD則是經過<script>標籤引入RequireJs,具體語法仍是去看官方文檔或者百度一下吧。CMD則是引入SeaJs。
相關文章
相關標籤/搜索