一、AMD規(guī)范
AMD規(guī)范挥下,全稱是Asynchronous Module Definition揍魂,即異步模塊加載機(jī)制。完整描述了模塊的定義棚瘟,依賴關(guān)系现斋,引用關(guān)系以及加載機(jī)制。
AMD的核心是預(yù)加載偎蘸,先對依賴的全部文件進(jìn)行加載庄蹋,加載完了再進(jìn)行處理瞬内。
實(shí)際上AMD 是 RequireJS 在推廣過程中對模塊定義的規(guī)范化的產(chǎn)出
優(yōu)點(diǎn):
適合在瀏覽器環(huán)境中異步加載模塊∠奘椋可以并行加載多個(gè)模塊虫蝶。 并可以按需加載。
RequireJS主要解決了兩個(gè)問題:
多個(gè)js文件可能有依賴關(guān)系倦西,被依賴的文件需要早于依賴它的文件加載到瀏覽器
js加載的時(shí)候?yàn)g覽器會停止頁面渲染能真,加載文件越多,頁面失去響應(yīng)時(shí)間越長
requireJS的使用:http://www.reibang.com/p/c90fff39c225
二扰柠、CMD規(guī)范
CMD規(guī)范:全稱是Common Module Definition粉铐,即通用模塊定義。按需加載卤档。在 CMD 規(guī)范中秦躯,一個(gè)模塊就是一個(gè)文件,使用define來進(jìn)行模塊裆装,define是一個(gè)全局函數(shù)踱承。
AMD和CMD最大的區(qū)別是對依賴模塊的執(zhí)行時(shí)機(jī)處理不同,而不是加載的時(shí)機(jī)或者方式不同哨免,二者皆為異步加載模塊茎活。
異步加載:不阻礙后面代碼加載執(zhí)行
AMD依賴前置,js可以方便知道依賴模塊是誰琢唾,立即加載载荔;而CMD就近依賴,需要使用把模塊變?yōu)樽址馕鲆槐椴胖酪蕾嚵四男┠K采桃,這也是很多人詬病CMD的一點(diǎn)懒熙,犧牲性能來帶來開發(fā)的便利性,實(shí)際上解析模塊用的時(shí)間短到可以忽略普办。
SeaJs使用:http://www.reibang.com/p/ebdf2233e3fe
三工扎、CommonJS規(guī)范
這種寫法適合服務(wù)端,因?yàn)樵诜?wù)器讀取模塊都是在本地磁盤衔蹲,加載速度很快肢娘。
CommonJS規(guī)范加載模塊是同步的,也就是說舆驶,只有加載完成橱健,才能執(zhí)行后面的操作。
所有代碼都運(yùn)行在模塊作用域沙廉,不會污染全局作用域拘荡。
模塊可以多次加載,但是只會在第一次加載時(shí)運(yùn)行一次撬陵,然后運(yùn)行結(jié)果就被緩存了珊皿,以后再加載官疲,就直接讀取緩存結(jié)果。要想讓模塊再次運(yùn)行亮隙,必須清除緩存。
模塊加載的順序垢夹,按照其在代碼中出現(xiàn)的順序溢吻。
參考:http://www.reibang.com/p/09ffac7a3b2c
————————————————
原文鏈接:https://blog.csdn.net/zyz00000000/article/details/109518007