中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

淺析AMD CMD CommonJS規范--javascript模塊化加載學習心得總結
來源:易賢網 閱讀:1097 次 日期:2016-07-19 16:00:59
溫馨提示:易賢網小編為您整理了“淺析AMD CMD CommonJS規范--javascript模塊化加載學習心得總結”,方便廣大網友查閱!

這是一篇關于javascript模塊化AMD,CMD,CommonJS的學習總結,作為記錄也給同樣對三種方式有疑問的童鞋們,有不對或者偏差之處,望各位大神指出,不勝感激。

本篇默認讀者大概知道require,seajs的用法(AMD,CMD用法),所以沒有加入使用語法。

1、為何而生:

 這三個規范都是為javascript模塊化加載而生的,都是在用到或者預計要用到某些模塊時候加載該模塊,使得大量的系統巨大的龐雜的代碼得以很好的組織和管理。模塊化使得我們在使用和管理代碼的時候不那么混亂,而且也方便了多人的合作。

2、那些規范們:

(1)、CommonJS 是一個有志于構建 JavaScript 生態圈的組織。整個社區致力于提高 JavaScript 程序的可移植性和可交換性,無論是在服務端還是瀏覽器端。

a group with a goal of building up the JavaScript ecosystem for web servers, desktop and command line apps and in the browser.

一個有目標的構建JavaScript生態系統Web服務器組,在瀏覽器和命令行應用程序和桌面。(他自己wiki上這么說的)

這個組織呢制定了一些規范 (可以去他們網站看看 http://www.commonjs.org/)包括CommonJS Modules/1.0 規范,我們平時所說的commonjs規范,說的就是這個了。

“The CommonJS API will fill that gap by defining APIs that handle many common application needs, ultimately providing a standard library as rich as those of Python, Ruby and Java. ”--(出自 http://www.commonjs.org/)

所以說Commonjs是一個更偏向于服務器端的規范。Node.js采用了這個規范。 根據CommonJS規范,一個單獨的文件就是一個模塊。加載模塊使用require方法,該方法讀 取一個文件并執行,最后返回文件內部的exports對象。

他又說了,可以用在下面這些場景  ,所以他更明顯的偏向服務器端。當然你也可以把它用在瀏覽器里邊(他們自己說可以)。

•Server-side JavaScript applications

•Command line tools

•Desktop GUI-based applications

•Hybrid applications (Titanium, Adobe AIR)

(2)、AMD規范

Commonjs解決了模塊化的問題,并且可以用在瀏覽器中,但是Commonjs是同步加載模塊,當要用到該模塊了,現加載現用,這種同步機制到了瀏覽器里邊就有問題了,加載速度啊啥的(覽器同步加載模塊會導致性能、可用性、調試和跨域訪問等問題)。

鑒于瀏覽器的特殊情況,又出現了一個規范,這個規范呢可以實現異步加載依賴模塊,并且會提前加載那就是AMD規范。AMD可以作為CommonJS模塊一個中轉的版本只要CommonJS沒有被用來同步的require調用。使用同步require調用的CommonJS代碼可以被轉換為使用回調風格的AMD模塊加載器(https://github.com/amdjs/amdjs-api/wiki/AMD-(%E4%B8%AD%E6%96%87%E7%89%88)  (它說的)。

下面是一個使用了簡單CommonJS轉換的模塊定義(它是amd規范的一種用法):

代碼如下:

   define(function (require, exports, module) {

     var a = require('a'),

         b = require('b');

     exports.action = function () {};

   });

所以說AMD和Commonjs是兼容的,只要稍稍調換一下調用方法就實現了同步加載(我很懷疑amd也是在commonjs基礎上加了個殼,然后并沒有找到其他的神馬說明和支持的文字,找到了一定加到這)。

看一下AMD規范你會發現,AMD基本都是提前說明依賴模塊,然后預加載這些模塊,實際上這就要求你提前想好這些依賴,提前寫好,不然寫代碼過程中要回到開頭繼續添加依賴。

(3)、CMD

不知道是不是針對這個問題,淘寶的玉伯大牛搞了個seajs出來,并聲稱這個規范是遵循CMD規范的,然后給出了這個規范的一個連接(打開會發現draft字樣)。關于這個規范呢玉伯在知乎是這么說的

”AMD 是 RequireJS 在推廣過程中對模塊定義的規范化產出。

CMD 是 SeaJS 在推廣過程中對模塊定義的規范化產出。

類似的還有 CommonJS Modules/2.0 規范,是 BravoJS 在推廣過程中對模塊定義的規范化產出。

還有不少⋯⋯

所以這個規范實際上是為了Seajs的推廣然后搞出來的。那么看看SeaJS是怎么回事兒吧,基本就是知道這個規范了。

同樣Seajs也是預加載依賴js跟AMD的規范在預加載這一點上是相同的,明顯不同的地方是調用,和聲明依賴的地方。AMD和CMD都是用difine和require,但是CMD標準傾向于在使用過程中提出依賴,就是不管代碼寫到哪突然發現需要依賴另一個模塊,那就在當前代碼用require引入就可以了,規范會幫你搞定預加載,你隨便寫就可以了。但是AMD標準讓你必須提前在頭部依賴參數部分寫好(沒有寫好? 倒回去寫好咯)。這就是最明顯的區別。

3、共生共處

由于CommonJS是服務器端的規范,更另外兩個標準實際不沖突。

AMD在國外用的更多,當然國內也是不少的,jQuery1,7版本開始使用,Dojo在1.6版本開始用,這已經能夠證明它足夠牛x了。

CMD當然也有很多人在用,但是基本都集中在國內,Seajs官網就展示了一大堆牛逼的公司在用(包括愛奇藝,騰訊微博,支付寶,淘寶等一大堆,去這看看http://seajs.org/docs/),估計小的不出名的也不計其數了,畢竟很多公司招聘都要求會seajs嘛。

所以三個規范目前都挺好(其實也主要是因為js么有自己的模塊加載機制,es6出來之后不知道會怎樣)。

當我們寫一個文件需要兼容不同的加載規范的時候怎么辦呢,看看下面的代碼。

(function (root, factory) { 

  if (typeof define === 'function' && define.amd) { 

    // AMD 

    define(['jquery', 'underscore'], factory); 

  } else if (typeof exports === 'object') { 

    // Node, CommonJS之類的 

    module.exports = factory(require('jquery'), require('underscore')); 

  } else { 

    // 瀏覽器全局變量(root 即 window) 

    root.returnExports = factory(root.jQuery, root._); 

  } 

}(this, function ($, _) { 

  // 方法 

  function a(){}; // 私有方法,因為它沒被返回 (見下面) 

  function b(){}; // 公共方法,因為被返回了 

  function c(){}; // 公共方法,因為被返回了 

  // 暴露公共方法 

  return { 

    b: b, 

    c: c 

  } 

}));

這個代碼可以兼容各種加載規范了。

4、AMD和CMD的區別

下面這幾點是玉伯在知乎上說的。

1. 對于依賴的模塊,AMD 是提前執行,CMD 是延遲執行。不過 RequireJS 從 2.0 開始,也改成可以延遲執行(根據寫法不同,處理方式不同)。CMD 推崇 as lazy as possible.

2. CMD 推崇依賴就近,AMD 推崇依賴前置。

3. AMD 的 API 默認是一個當多個用,CMD 的 API 嚴格區分,推崇職責單一。比如 AMD 里,require 分全局 require 和局部 require,都叫 require。CMD 里,沒有全局 require,而是根據模塊系統的完備性,提供 seajs.use 來實現模塊系統的加載啟動。CMD 里,每個 API 都簡單純粹。

4. 還有一些細節差異,具體看這個規范的定義就好,就不多說了。

( 好吧~第四點是不多說了。。。。。。。。。)

5、AMD和CMD的一些相同

都有difine和require,而且調用方式實際都可以添加依賴參數,也就是說都可以用提供依賴參數的方式來實現預加載依賴模塊(但是不推薦因為  注意:帶 id 和 deps 參數的 define 用法不屬于 CMD 規范,而屬于 Modules/Transport 規范。---來自:https://github.com/seajs/seajs/issues/242)。

AMD也可以在factory中使用require來現加載用到的模塊,但是這個模塊就不會預先加載,屬于用到才加載的同步加載了。

var a = require('a'); // 加載模塊a

有不妥之處,歡迎斧正。

以上這篇淺析AMD CMD CommonJS規范--javascript模塊化加載學習心得總結就是小編分享給大家的全部內容了,希望能給大家一個參考

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美影视一区| 亚洲国产三级在线| 国产手机视频精品| 久久亚洲视频| 欧美视频中文在线看 | 亚洲欧美日韩视频一区| 在线观看欧美亚洲| 国产欧美精品国产国产专区| 国产视频欧美| 性欧美大战久久久久久久久| 欧美精品xxxxbbbb| 亚洲国产精品一区制服丝袜 | 欧美四级电影网站| 国产亚洲成精品久久| 在线观看免费视频综合| 久久久久久9| 红桃av永久久久| 久久亚洲精品一区| 国产精品网站在线观看| 久久久精品午夜少妇| 欧美韩国一区| 国产一区亚洲| 欧美日本精品| 永久免费视频成人| 久久伊人亚洲| 美女主播一区| 亚洲啪啪91| 国产一区二区三区的电影| 欧美一区二粉嫩精品国产一线天| 国产亚洲免费的视频看| 欧美激情在线观看| 久久国产精品黑丝| 亚洲日本激情| 亚洲一区二区三区免费观看| 欧美成人免费在线视频| 99在线热播精品免费99热| 嫩草伊人久久精品少妇av杨幂| 国产精品人人爽人人做我的可爱| 亚洲视频精选| 国产美女精品视频| 欧美视频手机在线| 欧美交受高潮1| 亚洲一区二区免费| 亚洲高清视频一区二区| 国产热re99久久6国产精品| 欧美激情成人在线视频| 美脚丝袜一区二区三区在线观看| 亚洲午夜精品17c| 亚洲欧洲在线一区| 亚洲国产精品尤物yw在线观看| 国产日韩欧美另类| 国产精品乱子乱xxxx| 欧美视频一区二区在线观看| 美女精品自拍一二三四| 久久精品成人| 久久成人精品一区二区三区| 亚洲欧美日韩精品久久久| 99re在线精品| 在线视频精品| 亚洲色诱最新| 亚洲一区影音先锋| 亚洲欧美日韩国产中文在线| 欧美1区2区视频| 国产精品视频精品| 国产综合香蕉五月婷在线| 国产伦精品一区二区三区免费| 国产精品一区免费视频| 国产精品嫩草99av在线| 激情伊人五月天久久综合| 亚洲卡通欧美制服中文| 亚洲欧美另类在线| 久热精品视频| 欧美另类视频在线| 国产精品视频xxx| 欧美激情精品久久久久久久变态 | 欧美一区网站| 欧美亚洲日本一区| 亚洲国内欧美| 久久成人这里只有精品| 久久视频在线免费观看| 欧美日韩成人激情| 美女网站久久| 欧美三级午夜理伦三级中文幕| 欧美午夜精品久久久久久孕妇| 国产伦精品一区| 亚洲精品一二区| 欧美一区二区三区精品| 国产精品久久影院| 日韩视频不卡| 欧美日本国产视频| 亚洲激情在线观看| 欧美亚洲一区二区在线| 欧美精品首页| 一区二区毛片| 欧美视频亚洲视频| 欧美中文字幕在线观看| 国产精品久久国产精麻豆99网站| 欧美性做爰毛片| 欧美精品一区二区三区高清aⅴ| 欧美久久精品午夜青青大伊人| 国产一区二区三区的电影 | 中日韩美女免费视频网址在线观看 | 欧美日韩免费一区二区三区视频| 99精品视频免费在线观看| 欧美理论电影网| 亚洲第一成人在线| 欧美黄色大片网站| 亚洲精品美女在线观看| 久久精品国产999大香线蕉| 国产精品一区视频网站| 亚洲天堂偷拍| 国产精品美女久久久久av超清 | 国产精品观看| 欧美日韩国产成人在线91| 亚洲欧美久久久| 国产亚洲精品aa午夜观看| 亚洲人成久久| 欧美一区二区三区四区在线观看| 欧美精品v日韩精品v韩国精品v | 国产精品一区二区久久精品| 在线高清一区| 久久国产一区二区三区| 欧美午夜无遮挡| 国产视频一区欧美| 亚洲性视频网站| 欧美区亚洲区| 91久久国产综合久久91精品网站| 久久精品免费观看| 国产亚洲精品综合一区91| 亚洲欧美成人| 国产精品超碰97尤物18| 日韩视频不卡中文| 欧美高清视频www夜色资源网| 国产日产欧产精品推荐色| 亚洲在线第一页| 欧美三区不卡| 亚洲美女啪啪| 欧美日韩大片一区二区三区| 亚洲日本欧美天堂| 亚洲一区二区免费视频| 欧美日韩专区在线| 欧美午夜一区二区福利视频| 亚洲精品一区二区在线| 中文av字幕一区| 欧美大片在线看| 国产精品久久久久久久久免费| 一二美女精品欧洲| 欧美三级电影精品| 午夜免费在线观看精品视频| 欧美精品久久一区二区| 亚洲品质自拍| 欧美午夜精品一区二区三区| 亚洲一区二区免费看| 国产精品视频自拍| 久久aⅴ国产欧美74aaa| 韩国av一区二区三区在线观看 | 亚洲精品国产拍免费91在线| 国产午夜精品美女毛片视频| 国产精品入口麻豆原神| 国产色视频一区| 一本色道久久综合亚洲精品不卡| 亚洲第一区在线| 久久成人综合网| 久久麻豆一区二区| 久久艳片www.17c.com| 欧美日韩一二三区| 久久久久9999亚洲精品| 一区二区三区日韩精品| 欧美色中文字幕| 欧美制服丝袜| 精品动漫一区| 欧美日韩中文字幕在线| 欧美一区二区三区精品电影| 黄色日韩网站视频| 欧美日韩福利| 久久成年人视频| 99国产精品久久久久久久久久| 国产亚洲高清视频| 欧美大片在线观看一区| 午夜在线视频一区二区区别 | 久久久午夜精品| 一区二区免费在线观看| 国产一区二区三区在线观看精品 | 久久一区二区三区av| 99国产精品久久久| 国产午夜亚洲精品羞羞网站| 欧美日产一区二区三区在线观看| 亚洲综合视频在线| 国产视频一区欧美| 欧美日韩成人在线播放| 99re热这里只有精品免费视频| 国产精品视频yy9099| 亚洲一区二区三区久久 | 精品二区视频| 国产日韩av高清| 99精品久久久| 欧美77777| 香蕉久久国产| 一本色道久久综合一区| 亚洲电影免费观看高清完整版在线观看|