CMD、AMD姨丈、CommonJS 規(guī)范

為什么要使用模塊化畅卓?

網(wǎng)頁(yè)隨著技術(shù)的發(fā)展也變的越來(lái)越復(fù)雜,模塊化可以讓工作像流水線組裝一樣提高效率蟋恬,開(kāi)發(fā)過(guò)程中只要實(shí)現(xiàn)核心邏輯翁潘,其他部分可以直接拿別人生產(chǎn)的組裝。譬如車輛組裝的流水線歼争,如果每個(gè)零件都是現(xiàn)場(chǎng)自己加工 那根本不現(xiàn)實(shí)拜马,模塊化已經(jīng)深入到各行各業(yè),代碼的模塊化具有以下幾個(gè)優(yōu)點(diǎn)沐绒。

  1. 方便代碼的維護(hù)
  2. 方便團(tuán)隊(duì)的分工協(xié)作俩莽,管理進(jìn)度
  3. 實(shí)現(xiàn)代碼的解耦,提高代碼復(fù)用性
  4. 避免命名沖突

CMD洒沦、AMD豹绪、CommonJS 規(guī)范分別指什么价淌?有哪些應(yīng)用

CommonJS模塊化規(guī)范:Node就是根據(jù)這個(gè)規(guī)范實(shí)現(xiàn)的

  • CommonJS規(guī)范規(guī)定申眼,每個(gè)模塊就是一個(gè)文件瞒津,模塊內(nèi)部都是一個(gè)獨(dú)立的作用域
//math.js
var x = 5;
var add =function(v){
   return v+1
};
module.exports.x = x;
module.exports.add = add;
//main.js
var math= require('./math.js');
alert(math.x)//5
alert(math.add)//6
  • 上面代碼module.exports用來(lái)輸出變量跟方法,require用于家中模塊
  • CommonJs特點(diǎn)是模塊擁有獨(dú)立作用域括尸,變量方法都是私有的巷蚪,模塊需要的時(shí)候就直接加載

AMDAsynchronous Module Definition的簡(jiǎn)寫,意思就是異步模塊定義濒翻。

  • 上面的CommonJs看起來(lái)很方便屁柏,但是這種同步的方式放到瀏覽器卻有點(diǎn)不合適,如果依賴的http請(qǐng)求時(shí)間變長(zhǎng)有送,那瀏覽器就會(huì)出現(xiàn)假死狀態(tài)淌喻。而AMD就是異步加載的方式裸删,require([module], callback);前面數(shù)組就是需要的模塊阵赠,當(dāng)模塊加載成功之后才會(huì)執(zhí)行后面回調(diào)。

  • 語(yǔ)法define(id?, dependencies?, factory); 實(shí)現(xiàn)這一規(guī)范的有require.js匕荸,curl枷邪,Dojo

    • id是模塊名字,這是一個(gè)可選參數(shù)药薯,如不定義那默認(rèn)就是模塊去后綴的文件名
    • dependencies? 是定義模塊所需要的依賴救斑,也是可選的
    • factory是模塊需要執(zhí)行的函數(shù)脸候,如果是對(duì)象那就是模塊的返回值
//math.js
define(function (){
    var add = function (x,y){
      return x+y;
    };
    return {
      add: add
    };
  });
//main.js
require.config({
    baseUrl: "js",
  });

require(['math'], function (math){
    alert(math.add(1,1));
  });

//index.html,加載主模塊
<script src="js/require.js" data-main="js/main"></script>

amd.png
  • 上面就是require.js的運(yùn)用运沦,首先引入require.js 使用data-main定義主模塊,require.config中的baseUrl是配置模塊的基本路徑信息嫁盲,當(dāng)需要加載模塊的時(shí)候就require添加模塊烈掠,然后回調(diào)缸托,回調(diào)中的形參代表的就是加載的模塊俐镐。

CMDCommon Moudle Definition的縮寫的佩抹,意思就是通用模塊定義取董,這個(gè)規(guī)范是sea.js推廣過(guò)程中產(chǎn)生的,解決的問(wèn)題和AMD是一樣的廊勃,不過(guò)在寫法上是和模仿ConmmonJs

  • 語(yǔ)法define(id?, deps?, factory)工廠函數(shù)中有require, exports, module三個(gè)參數(shù)
  • require是接受其他模塊方法坡垫,exports是模塊提供給外部調(diào)用的api画侣,module儲(chǔ)存模塊的一些信息
//math.js
define(function(requires,exprots,module){
   exprots.add = function(v){
                return v+1;
             };
})
//main.js
define(function(requires,exprots,module){
  var add = require('math').add;
  var a = 1;
  alert(add(a));
})
//加載模塊
seajs.use(['main.js'], function(a){
});

AMDCMD區(qū)別

  • AMD是提前加載依賴并解析
    • 優(yōu)點(diǎn)是開(kāi)始把依賴一次性加載解析,當(dāng)使用時(shí)相響應(yīng)速度將更快溉卓,但當(dāng)是條件引用時(shí)搬泥,加載的依賴可能將不會(huì)用不到,所以這樣做也會(huì)造成性能的浪費(fèi)忿檩。另外有個(gè)缺點(diǎn)就是依賴要提前寫出來(lái),很多時(shí)候開(kāi)始我們并不知道依賴是什么沙咏,所以可能會(huì)寫到一半的時(shí)候需要回到頂部把依賴添加上班套。
  • CMD也是提前加載依賴,但當(dāng)需要的時(shí)候 也就是require的時(shí)候才開(kāi)始解析
    • 優(yōu)點(diǎn)是寫法上將會(huì)更方便吆豹,依賴不需要提前寫好,當(dāng)我們需要的時(shí)候 直接寫依賴鸳吸,拿來(lái)即用,但缺點(diǎn)就是耗時(shí)會(huì)更長(zhǎng)坎拐,中間多了解析的時(shí)間。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末都伪,一起剝皮案震驚了整個(gè)濱河市陨晶,隨后出現(xiàn)的幾起案子帝璧,更是在濱河造成了極大的恐慌,老刑警劉巖褐耳,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铃芦,死亡現(xiàn)場(chǎng)離奇詭異襟雷,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)咧虎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門老客,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)震叮,“玉大人,你說(shuō)我怎么就攤上這事尉间。” “怎么了贪薪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵画切,是天一觀的道長(zhǎng)囱怕。 經(jīng)常有香客問(wèn)我,道長(zhǎng)典格,這世上最難降的妖魔是什么台丛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任挽霉,我火速辦了婚禮,結(jié)果婚禮上本鸣,老公的妹妹穿的比我還像新娘硅蹦。我一直安慰自己,他們只是感情好涮瞻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布署咽。 她就那樣靜靜地躺著生音,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缀遍。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天台谊,我揣著相機(jī)與錄音,去河邊找鬼酪呻。 笑死盐须,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的阶冈。 我是一名探鬼主播立帖,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼晓勇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼绑咱!你這毒婦竟也來(lái)了枢泰?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤后添,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滑肉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年跃惫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爆存。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡终蒂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拇泣,到底是詐尸還是另有隱情,我是刑警寧澤睁蕾,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布债朵,位于F島的核電站,受9級(jí)特大地震影響臭杰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜渴杆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一磁奖、第九天 我趴在偏房一處隱蔽的房頂上張望某筐。 院中可真熱鬧,春花似錦南誊、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至柑司,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蟆湖,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工隅津, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人结窘。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓充蓝,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親谓苟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 概念 1近迁、為什么要使用模塊化鉴竭? 當(dāng)代碼規(guī)模較大或進(jìn)行團(tuán)隊(duì)協(xié)作時(shí)岸浑,如果不實(shí)行模塊化,有可能導(dǎo)致命名沖突----解決命...
    周花花啊閱讀 816評(píng)論 0 3
  • 問(wèn)答 1.為什么要使用模塊化? 要使用模塊化揩徊,我們要知道什么是模塊化嵌赠?首先一個(gè)模塊是為了實(shí)現(xiàn)特定功能的文件熄赡,模塊化...
    GarenWang閱讀 1,529評(píng)論 1 1
  • 示例代碼地址 1. 為什么要使用模塊化掖肋? 1.解決命名沖突 2.代碼解耦,提高復(fù)用性 3.提高代碼可讀性 3.方便...
    candy252324閱讀 597評(píng)論 0 0
  • 一疗锐、 為什么要使用模塊化? 解決命名沖突 解決依賴管理 提高代碼可讀性 代碼解耦,提高復(fù)用性 二滑臊、CMD、AMD雇卷、...
    Chy18閱讀 370評(píng)論 0 0
  • 1.為什么要使用模塊化脱货? 當(dāng)去執(zhí)行某個(gè)文件的過(guò)程中律姨,如果將全部代碼寫在同一個(gè)文件下臼疫,在命名變量時(shí),有些變量是全局變...
    饑人谷_徐小坤閱讀 344評(píng)論 0 0