亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

AMD與CMD區別

2024-04-27 15:12:15
字體:
來源:轉載
供稿:網友

最明顯的區別就是在模塊定義時對依賴的處理不同

1.AMD推崇依賴前置,在定義模塊的時候就要聲明其依賴的模塊2.CMD推崇就近依賴,只有在用到某個模塊的時候再去require

這種區別各有優劣,只是語法上的差距,而且requireJS和SeaJS都支持對方的寫法

AMD和CMD最大的區別是對依賴模塊的執行時機處理不同,注意不是加載的時機或者方式不同

很多人說requireJS是異步加載模塊,SeaJS是同步加載模塊,這么理解實際上是不準確的,其實加載模塊都是異步的,只不過AMD依賴前置,js可以方便知道依賴模塊是誰,立即加載,而CMD就近依賴,需要使用把模塊變為字符串解析一遍才知道依賴了那些模塊,這也是很多人詬病CMD的一點,犧牲性能來帶來開發的便利性,實際上解析模塊用的時間短到可以忽略

為什么我們說兩個的區別是依賴模塊執行時機不同,為什么很多人認為ADM是異步的,CMD是同步的(除了名字的原因。。。)

同樣都是異步加載模塊,AMD在加載模塊完成后就會執行改模塊,所有模塊都加載執行完后會進入require的回調函數,執行主邏輯,這樣的效果就是依賴模塊的執行順序和書寫順序不一定一致,看網絡速度,哪個先下載下來,哪個先執行,但是主邏輯一定在所有依賴加載完成后才執行

CMD加載完某個依賴模塊后并不執行,只是下載而已,在所有依賴模塊加載完成后進入主邏輯,遇到require語句的時候才執行對應的模塊,這樣模塊的執行順序和書寫順序是完全一致的

這也是很多人說AMD用戶體驗好,因為沒有延遲,依賴模塊提前執行了,CMD性能好,因為只有用戶需要的時候才執行的原因.

原文:http://www.cnblogs.com/hgonlywj/p/4854038.html

兩者的主要區別如下:

定位有差異。RequireJS 想成為瀏覽器端的模塊加載器,同時也想成為 Rhino / Node 等環境的模塊加載器。Sea.js 則專注于 Web 瀏覽器端,同時通過 Node 擴展的方式可以很方便跑在 Node 環境中。

遵循的規范不同。RequireJS 遵循 AMD(異步模塊定義)規范,Sea.js 遵循 CMD (通用模塊定義)規范。規范的不同,導致了兩者 API 不同。Sea.js 更貼近 CommonJS Modules/1.1 和 Node Modules 規范。

推廣理念有差異。RequireJS 在嘗試讓第三方類庫修改自身來支持 RequireJS,目前只有少數社區采納。Sea.js 不強推,采用自主封裝的方式來“海納百川”,目前已有較成熟的封裝策略。

對開發調試的支持有差異。Sea.js 非常關注代碼的開發調試,有 nocache、debug 等用于調試的插件。RequireJS 無這方面的明顯支持。

插件機制不同。RequireJS 采取的是在源碼中預留接口的形式,插件類型比較單一。Sea.js 采取的是通用事件機制,插件類型更豐富。

還有不少差異,涉及具體使用方式和源碼實現,歡迎有興趣者研究并發表看法。

總之,如果說 RequireJS 是 PRototype 類庫的話,則 Sea.js 致力于成為 jQuery 類庫。

我可以說下AMD/CMD的區別以及我的看法:

有必要簡單提一下兩者的主要區別,CMD推崇依賴就近,可以把依賴寫進你的代碼中的任意一行,例:
define(function(require, exports, module) {  var a = require('./a')  a.doSomething()  var b = require('./b')  b.doSomething()})代碼在運行時,首先是不知道依賴的,需要遍歷所有的require關鍵字,找出后面的依賴。具體做法是將function toString后,用正則匹配出require關鍵字后面的依賴。顯然,這是一種犧牲性能來換取更多開發便利的方法。而AMD是依賴前置的,換句話說,在解析和執行當前模塊之前,模塊作者必須指明當前模塊所依賴的模塊,表現在require函數的調用結構上為:
define(['./a','./b'],function(a,b){   a.doSomething()   b.doSomething()}) 代碼在一旦運行到此處,能立即知曉依賴。而無需遍歷整個函數體找到它的依賴,因此性能有所提升,缺點就是開發者必須顯式得指明依賴——這會使得開發工作量變大,比如:當你寫到函數體內部幾百上千行的時候,忽然發現需要增加一個依賴,你不得不回到函數頂端來將這個依賴添加進數組。細心的讀者可能發現,到目前位置我討論的AMD和CMD的思想的關于依賴的部分,都只討論的“硬依賴”,也就是執行前肯定需要的依賴,但是這不是全部的情況。有的時候情況是這樣的:
// 函數體內:if(status){  a.doSomething()}在這個函數體內,可能依賴a,也可能不依賴a,我把這種可能的依賴成為“軟依賴”。對于軟依賴當然可以直接當硬依賴處理,但是這樣不經濟,因為依賴是不一定的,有可能加載了此處的依賴而實際上沒有用上。對于軟依賴的處理,我推薦依賴前置+回調函數的實現形式。上面的例子簡單表述如下:
// 函數體內:if(status){  async(['a'],function(a){    a.doSomething()  })}至此可以對由commonJS衍生出來的方案做出總結了。在瀏覽器端來設計模塊加載機制,需要考慮依賴的問題。我們先把依賴分為兩種,“強依賴” —— 肯定需要 和“弱依賴” —— 可能需要。對于強依賴,如果要性能優先,則考慮參照依賴前置的思想設計你的模塊加載器,我個人也更推崇這個方案一些;如果考慮開發成本優先,則考慮按照依賴就近的思想設計你的模塊加載器。對于弱依賴,只需要將弱依賴的部分改寫到回調函數內即可。

如果現在我要實現一個模塊加載器,我會將強依賴前置,弱依賴采用異步回調函數的形式,其它的方法我認為都只是語法糖而已,僅此就夠了。

轉自: http://www.zhihu.com/question/21347409#answer-2323656


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲a在线观看| 久久成人免费视频| 乱亲女秽乱长久久久| 最近2019好看的中文字幕免费| 久久精品视频99| 国产精品人人做人人爽| 欧美性高潮床叫视频| 亚洲国产成人在线播放| 亚洲国产精品va在线| 成人免费福利在线| 欧美激情第一页xxx| 日韩av电影在线免费播放| 欧美国产日韩一区二区| 久久久精品一区二区三区| 久久久精品视频成人| 欧美性高跟鞋xxxxhd| 日韩av中文字幕在线播放| 日本久久亚洲电影| 亚洲欧美日韩中文在线制服| 九九九久久国产免费| 日韩av在线导航| 欧美一级片久久久久久久| 久久久人成影片一区二区三区| 亚洲精品国产suv| 欧美日韩亚洲国产一区| 久久天天躁狠狠躁夜夜躁| 亚洲免费成人av电影| 欧美日韩视频在线| 亚洲最大福利视频网站| 日韩av日韩在线观看| 疯狂做受xxxx高潮欧美日本| 欧美精品福利视频| 国产成人精品免高潮在线观看| 日韩在线观看网址| 久久久国产91| 久久久这里只有精品视频| 欧美人与性动交a欧美精品| 欧美疯狂做受xxxx高潮| 色偷偷9999www| 欧美又大又硬又粗bbbbb| 亚洲免费人成在线视频观看| 国产97在线视频| 亚洲国产成人91精品| 日韩欧美一区二区在线| 成人免费自拍视频| 亚洲欧洲在线播放| 69视频在线免费观看| 午夜剧场成人观在线视频免费观看| 日本亚洲欧美成人| 日本中文字幕久久看| 国产剧情久久久久久| 亚洲男人天天操| 国产精品美女av| 狠狠色香婷婷久久亚洲精品| 久久成人一区二区| 久久成人免费视频| 欧美精品videos性欧美| 精品久久久久人成| 久久亚洲成人精品| 久久精品视频播放| 日韩中文字幕在线精品| 日韩成人在线播放| 日韩av免费在线看| 久久伊人精品视频| 亚洲裸体xxxx| 国产日本欧美在线观看| 91超碰中文字幕久久精品| 成人午夜在线视频一区| 国产成人欧美在线观看| 综合久久五月天| 91av在线免费观看视频| 欧美激情xxxxx| 亚洲午夜未删减在线观看| 国产午夜精品全部视频在线播放| 精品国产91乱高清在线观看| 8x拔播拔播x8国产精品| 啪一啪鲁一鲁2019在线视频| 亚洲精品国产拍免费91在线| 日韩美女免费观看| 一本一本久久a久久精品综合小说| 欧美午夜精品在线| 亚洲曰本av电影| 欧美激情综合亚洲一二区| 色综合天天综合网国产成人网| 亚洲a一级视频| 欧美日韩亚洲成人| 亚洲精品在线不卡| 久久97精品久久久久久久不卡| 日韩欧美亚洲成人| 欧美一级电影免费在线观看| 国产精品自拍偷拍视频| 色综久久综合桃花网| 国产主播喷水一区二区| 国产主播欧美精品| 青青久久aⅴ北条麻妃| 国产精品一区二区久久| 九九久久久久99精品| 亚洲日韩第一页| 精品香蕉一区二区三区| 国产精品视频久久| 久久99国产综合精品女同| 国产精品视频99| 精品福利免费观看| 亚洲国产另类 国产精品国产免费| 欧美成人精品在线播放| 91精品视频在线免费观看| 欧美另类极品videosbest最新版本| 亚洲最大av网站| 欧美成aaa人片在线观看蜜臀| 欧美成人精品三级在线观看| 国产欧美最新羞羞视频在线观看| 97精品一区二区视频在线观看| 在线视频亚洲欧美| 久久99久国产精品黄毛片入口| 日韩激情视频在线| 欧美日韩国产色视频| 中文字幕成人在线| 亚洲三级免费看| 亚洲欧美另类国产| 国产精品久久久久一区二区| 成人动漫网站在线观看| 国模吧一区二区三区| 国产精品入口夜色视频大尺度| 久久97精品久久久久久久不卡| 欧美国产日韩在线| 51视频国产精品一区二区| 亚洲第一视频网| 欧美午夜精品伦理| 国产精品日韩在线| 精品国产区一区二区三区在线观看| 亚洲精品久久久久久久久久久| 亚洲一区二区日本| 欧美久久精品一级黑人c片| 久久国产视频网站| 亚洲资源在线看| 亚洲国产高清福利视频| 久久天天躁夜夜躁狠狠躁2022| 26uuu另类亚洲欧美日本一| 久久69精品久久久久久久电影好| 国产精品96久久久久久| 在线视频日本亚洲性| 2019国产精品自在线拍国产不卡| 青青草原一区二区| 91精品综合久久久久久五月天| 亚洲欧洲自拍偷拍| 日韩av快播网址| 欧美性高跟鞋xxxxhd| 欧美在线观看一区二区三区| 欧美大尺度电影在线观看| 欧美日韩国产二区| 久久免费少妇高潮久久精品99| 久久av.com| 久操成人在线视频| 久久久久这里只有精品| 成人国产精品久久久| 91极品女神在线| 亚洲精品videossex少妇| 欧美电影免费播放| 亚洲最大的av网站| 亚洲欧美日韩国产精品| 欧美日韩成人精品| 亚洲性av在线| 国产精品视频自在线| 美乳少妇欧美精品|