<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        淺析AMDCMDCommonJS規(guī)范--javascript模塊化加載學(xué)習(xí)心得總結(jié)_javascript技巧

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 20:52:12
        文檔

        淺析AMDCMDCommonJS規(guī)范--javascript模塊化加載學(xué)習(xí)心得總結(jié)_javascript技巧

        淺析AMDCMDCommonJS規(guī)范--javascript模塊化加載學(xué)習(xí)心得總結(jié)_javascript技巧:這是一篇關(guān)于javascript模塊化AMD,CMD,CommonJS的學(xué)習(xí)總結(jié),作為記錄也給同樣對三種方式有疑問的童鞋們,有不對或者偏差之處,望各位大神指出,不勝感激。 本篇默認(rèn)讀者大概知道require,seajs的用法(AMD,CMD用法),所以沒有加入使用語法。 1、為何而生:
        推薦度:
        導(dǎo)讀淺析AMDCMDCommonJS規(guī)范--javascript模塊化加載學(xué)習(xí)心得總結(jié)_javascript技巧:這是一篇關(guān)于javascript模塊化AMD,CMD,CommonJS的學(xué)習(xí)總結(jié),作為記錄也給同樣對三種方式有疑問的童鞋們,有不對或者偏差之處,望各位大神指出,不勝感激。 本篇默認(rèn)讀者大概知道require,seajs的用法(AMD,CMD用法),所以沒有加入使用語法。 1、為何而生:

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

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

        1、為何而生:

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


        2、那些規(guī)范們:

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

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

        一個有目標(biāo)的構(gòu)建JavaScript生態(tài)系統(tǒng)Web服務(wù)器組,在瀏覽器和命令行應(yīng)用程序和桌面。(他自己wiki上這么說的)

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

        “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是一個更偏向于服務(wù)器端的規(guī)范。Node.js采用了這個規(guī)范。 根據(jù)CommonJS規(guī)范,一個單獨的文件就是一個模塊。加載模塊使用require方法,該方法讀 取一個文件并執(zhí)行,最后返回文件內(nèi)部的exports對象。

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

        •Server-side JavaScript applications
        •Command line tools
        •Desktop GUI-based applications
        •Hybrid applications (Titanium, Adobe AIR)

        (2)、AMD規(guī)范

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

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


        下面是一個使用了簡單CommonJS轉(zhuǎn)換的模塊定義(它是amd規(guī)范的一種用法):
        代碼如下:
        define(function (require, exports, module) {
        var a = require('a'),
        b = require('b');

        exports.action = function () {};
        });

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

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

         
        (3)、CMD

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

        ”AMD 是 RequireJS 在推廣過程中對模塊定義的規(guī)范化產(chǎn)出。

        CMD 是 SeaJS 在推廣過程中對模塊定義的規(guī)范化產(chǎn)出。
        類似的還有 CommonJS Modules/2.0 規(guī)范,是 BravoJS 在推廣過程中對模塊定義的規(guī)范化產(chǎn)出。
        還有不少⋯⋯

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

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


        3、共生共處

        由于CommonJS是服務(wù)器端的規(guī)范,更另外兩個標(biāo)準(zhǔn)實際不沖突。

        AMD在國外用的更多,當(dāng)然國內(nèi)也是不少的,jQuery1,7版本開始使用,Dojo在1.6版本開始用,這已經(jīng)能夠證明它足夠牛x了。

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

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

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

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


        4、AMD和CMD的區(qū)別

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

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

        3. AMD 的 API 默認(rèn)是一個當(dāng)多個用,CMD 的 API 嚴(yán)格區(qū)分,推崇職責(zé)單一。比如 AMD 里,require 分全局 require 和局部 require,都叫 require。CMD 里,沒有全局 require,而是根據(jù)模塊系統(tǒng)的完備性,提供 seajs.use 來實現(xiàn)模塊系統(tǒng)的加載啟動。CMD 里,每個 API 都簡單純粹。

        4. 還有一些細(xì)節(jié)差異,具體看這個規(guī)范的定義就好,就不多說了。
        ( 好吧~第四點是不多說了。。。。。)


        5、AMD和CMD的一些相同

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

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

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

        有不妥之處,歡迎斧正。

        以上這篇淺析AMD CMD CommonJS規(guī)范--javascript模塊化加載學(xué)習(xí)心得總結(jié)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        淺析AMDCMDCommonJS規(guī)范--javascript模塊化加載學(xué)習(xí)心得總結(jié)_javascript技巧

        淺析AMDCMDCommonJS規(guī)范--javascript模塊化加載學(xué)習(xí)心得總結(jié)_javascript技巧:這是一篇關(guān)于javascript模塊化AMD,CMD,CommonJS的學(xué)習(xí)總結(jié),作為記錄也給同樣對三種方式有疑問的童鞋們,有不對或者偏差之處,望各位大神指出,不勝感激。 本篇默認(rèn)讀者大概知道require,seajs的用法(AMD,CMD用法),所以沒有加入使用語法。 1、為何而生:
        推薦度:
        標(biāo)簽: CMD js javascript
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 四虎永久免费影院| 日本免费一区二区三区最新| 久久亚洲AV永久无码精品| 深夜a级毛片免费视频| 全黄性性激高免费视频| 处破女第一次亚洲18分钟| 国产精品自在自线免费观看| 亚洲AV网一区二区三区 | 亚洲国产成人久久精品影视| 最近中文字幕免费大全| 蜜芽亚洲av无码精品色午夜| 97碰公开在线观看免费视频| 亚洲 日韩 色 图网站| 国产无遮挡裸体免费视频| 免费国产va在线观看| 亚洲一级Av无码毛片久久精品| 美女被免费网站91色| 亚洲最大的成网4438| 免费A级毛片无码免费视| 色偷偷亚洲第一综合网| 亚洲精品一级无码中文字幕| 国产午夜精品理论片免费观看| 亚洲2022国产成人精品无码区 | 精品在线视频免费| 久久亚洲高清综合| 永久看日本大片免费35分钟| 亚洲国产精品精华液| 国产成人亚洲精品影院| 99爱在线观看免费完整版| 亚洲日韩中文字幕无码一区| 亚洲精品国产精品国自产观看 | 我要看免费的毛片| 国产免费AV片在线观看播放| 亚洲国产美国国产综合一区二区| 50岁老女人的毛片免费观看| 国产成人亚洲精品播放器下载| 亚洲色爱图小说专区| 日韩精品成人无码专区免费| 成人免费av一区二区三区| 亚洲三级高清免费| 亚洲午夜未满十八勿入网站2|