Node服務(wù)環(huán)境下,使用commonjs規(guī)范,每一個(gè)js文件下都會(huì)有一個(gè)全局變量module表示當(dāng)前模塊,其中exports屬性用于暴露當(dāng)前需要共享的屬性或方法給外部,其他模塊通過require來獲取。
1.CommonJS,有一個(gè)全局性方法require(),用于加載模塊。假定有一個(gè)數(shù)學(xué)模塊math.js,就可以像下面這樣加載。
var math = require(‘math‘);
然后,就可以調(diào)用模塊提供的方法:
var math = require(‘math‘);
math.add(2,3); // 5
第二行math.add(2, 3),在第一行require(‘math‘)之后運(yùn)行,因此必須等math.js加載完成。也就是說,如果加載時(shí)間很長,整個(gè)應(yīng)用就會(huì)停在那里等。
這對服務(wù)器端不是一個(gè)問題,因?yàn)樗械哪K都存放在本地硬盤,可以同步加載完成,等待時(shí)間就是硬盤的讀取時(shí)間。但是,對于瀏覽器,這卻是一個(gè)大問題,因?yàn)槟K都放在服務(wù)器端,等待時(shí)間取決于網(wǎng)速的快慢,可能要等很長時(shí)間,瀏覽器處于"假死"狀態(tài)。
因此,瀏覽器端的模塊,不能采用"同步加載"(synchronous),只能采用"異步加載"(asynchronous)。這就是AMD規(guī)范誕生的背景。
2:AMD是"Asynchronous Module Definition"的縮寫,意思就是"異步模塊定義"。它采用異步方式加載模塊,模塊的加載不影響它后面語句的運(yùn)行。所有依賴這個(gè)模塊的語句,都定義在一個(gè)回調(diào)函數(shù)中,等到加載完成之后,這個(gè)回調(diào)函數(shù)才會(huì)運(yùn)行。
AMD也采用require()語句加載模塊,但是不同于CommonJS,它要求兩個(gè)參數(shù):
require([module], callback);
第一個(gè)參數(shù)[module],是一個(gè)數(shù)組,里面的成員就是要加載的模塊;第二個(gè)參數(shù)callback,則是加載成功之后的回調(diào)函數(shù)。如果將前面的代碼改寫成AMD形式,就是下面這樣:
require([‘math‘], function (math) {
math.add(2, 3);
});//這里是否意味著可以有多個(gè)require異步執(zhí)行,誰先加載完成就先執(zhí)行自身回調(diào)?
math.add()與math模塊加載不是同步的,瀏覽器不會(huì)發(fā)生假死。所以很顯然,AMD比較適合瀏覽器環(huán)境。
目前,主要有兩個(gè)Javascript庫實(shí)現(xiàn)了AMD規(guī)范:require.js和curl.js。
原文:http://www.bubuko.com/infodetail-2224995.html
module:http://javascript.ruanyifeng.com/nodejs/module.html#toc9
AMD(異步加載模塊)和CMD(同步加載模塊)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- JS中的模塊規(guī)范(CommonJS,AMD,CMD),如果你聽過js模塊化這個(gè)東西,那么你就應(yīng)該聽過或Common...
- 轉(zhuǎn)載于作者:linwalker via:http://m.itdecent.cn/p/d67bc79976e6...
- 1 個(gè)人理解;有錯(cuò)希望大家指出;稍后更新拖拽上傳文件; 2、commonJS commonjs的目標(biāo)是制定一個(gè)js...
- 前端模塊規(guī)范有三種:CommonJs,AMD和CMD。CommonJs用在服務(wù)器端,AMD和CMD用在瀏覽器環(huán)境A...
- 隨著前端業(yè)務(wù)復(fù)雜度的增加,模塊化成為一個(gè)大的趨勢。而在ES6還未被瀏覽器所支持的情況下,commonjs作為ES6...