最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript模塊規(guī)范之AMD規(guī)范和CMD規(guī)范

 更新時間:2015年10月27日 10:33:09   投稿:mrr  
本篇文章給大家介紹js模塊規(guī)范之AMD規(guī)范和CMD規(guī)范,模塊化是一種處理復(fù)雜系統(tǒng)分解為代碼結(jié)構(gòu)更合理,可維護性更高的可管理的模塊的方式,對js amd cmd規(guī)范感興趣的童鞋可以來本文學習

模塊化是指在解決某一個復(fù)雜問題或者一系列的雜糅問題時,依照一種分類的思維把問題進行系統(tǒng)性的分解以之處理。模塊化是一種處理復(fù)雜系統(tǒng)分解為代碼結(jié)構(gòu)更合理,可維護性更高的可管理的模塊的方式??梢韵胂笠粋€巨大的系統(tǒng)代碼,被整合優(yōu)化分割成邏輯性很強的模塊時,對于軟件是一種何等意義的存在。對于軟件行業(yè)來說:解耦軟件系統(tǒng)的復(fù)雜性,使得不管多么大的系統(tǒng),也可以將管理,開發(fā),維護變得“有理可循”。

還有一些對于模塊化一些專業(yè)的定義為:模塊化是軟件系統(tǒng)的屬性,這個系統(tǒng)被分解為一組高內(nèi)聚,低耦合的模塊。那么在理想狀態(tài)下我們只需要完成自己部分的核心業(yè)務(wù)邏輯代碼,其他方面的依賴可以通過直接加載被人已經(jīng)寫好模塊進行使用即可。

一、AMD

AMD就只有一個接口:define(id?,dependencies?,factory);

它要在聲明模塊的時候制定所有的依賴(dep),并且還要當做形參傳到factory中,像這樣:

復(fù)制代碼 代碼如下:

define(['dep1','dep2'],function(dep1,dep2){...});

要是沒什么依賴,就定義簡單的模塊,下面這樣就可以啦

define(function(){
  var exports = {};
  exports.method = function(){...};
  return exports;
});

這里有define,把東西包裝起來,那Node實現(xiàn)中怎么沒看到有define關(guān)鍵字呢,它也要把東西包裝起來,其實,只是Node隱式包裝了而已..

RequireJS就是實現(xiàn)了AMD規(guī)范的

二、CMD

玉伯寫了seajs,就是遵循他提出的CMD規(guī)范,比AMD稍微強大點,用起來感覺也方便些

三、AMD與CMD的區(qū)別

CMD相當于按需加載,定義一個模塊的時候不需要立即制定依賴模塊,在需要的時候require就可以了,比較方便;而AMD則相反,定義模塊的時候需要制定依賴模塊,并以形參的方式引入factory中

//AMD方式定義模塊

define(['dep1','dep2'],function(dep1,dep2){
  //內(nèi)部只能使用制定的模塊
  return function(){};
});

//CMD

define(function(require,exports,module){
 //此處如果需要某XX模塊,可以引入
 var xx=require('XX');
});

而SEAJS也有use功能也是需要先引入所有依賴的模塊,如

//SEAJS.Use方式
seajs.use(['dep1','dep2'],function(dep1,dep2){
  //這里實現(xiàn)事務(wù)
});

 四、插件支持

但全球有兩種比較流行的 JavaScript 模塊化體系,一個是 Node 實現(xiàn)的 CommonJS,另外一個是 AMD。很多類庫都同時支持 AMD 和 CommonJS,但是不支持 CMD?;蛟S國內(nèi)有很多 CMD 模塊,但并沒有在世界上流行起來。

現(xiàn)在比較火的 React 及周邊類庫,就是直接使用 CommonJS 的模塊體系,使用 npm 管理模塊,使用 Browserify 打包輸出模塊。
不久的將來 ES6 中新的模塊化標準,可能就都得遵循新的標準了,什么AMD、CMD可能到時也不會怎么用了。

但是目前來說,前端開發(fā)沒有用模塊化編程就真的out的了,而目前的模塊化編程,本人還是建議用SEAJS,雖然很多插件需要追加或修改一小塊代碼才能支持。但改過一次就能反復(fù)使用,也不會影響其它標準的支持。總體還算是比較方便實用的。

單獨解釋AMD 與 CMD 區(qū)別到底在哪里?

    看了以上 AMD,requireJS 與 CMD, seaJS的簡單介紹會有點感覺模糊,總感覺較為相似。因為像 requireJS 其并不是只是純粹的AMD固有思想,其也是有CMD規(guī)范的思想,只不過是推薦 AMD規(guī)范方式而已, seaJS也是一樣。

    下面是玉伯對于 AMD 與 CMD 區(qū)別的解釋:

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

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

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

    這些規(guī)范的目的都是為了 JavaScript 的模塊化開發(fā),特別是在瀏覽器端的。 

   目前這些規(guī)范的實現(xiàn)都能達成瀏覽器端模塊化開發(fā)的目的。    

 區(qū)別:

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

    2. CMD 推崇依賴就近,AMD 推崇依賴前置??创a:

// CMD

define(function(require, exports, module) {
 var a = require('./a')
 a.doSomething()
 // 此處略去 100 行
 var b = require('./b') // 依賴可以就近書寫
 b.doSomething()
 // ...
})

// AMD 默認推薦的是

define(['./a', './b'], function(a, b) { // 依賴必須一開始就寫好
 a.doSomething()
 // 此處略去 100 行
 b.doSomething()
 // ...
})

雖然 AMD 也支持 CMD 的寫法,同時還支持將 require 作為依賴項傳遞,但 RequireJS 的作者默認是最喜歡上面的寫法,也是官方文檔里默認的模塊定義寫法。

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

CMD 里,每個 API 都簡單純粹。

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

相關(guān)文章

  • 微信小程序如何獲取用戶頭像和昵稱

    微信小程序如何獲取用戶頭像和昵稱

    這篇文章主要介紹了微信小程序如何獲取用戶頭像和昵稱,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • TypeScript中Class類的基本使用方法

    TypeScript中Class類的基本使用方法

    在TypeScript中,我們可以使用Class來定義類,這使得我們能夠更加結(jié)構(gòu)化地組織代碼并使用面向?qū)ο蟮乃枷脒M行開發(fā),本文小編將給大家詳細的總結(jié)一下TypeScript中Class類的基本語法,需要的朋友可以參考下
    2023-09-09
  • 通過javascript實現(xiàn)掃雷游戲代碼實例

    通過javascript實現(xiàn)掃雷游戲代碼實例

    這篇文章主要介紹了通過javascript實現(xiàn)掃雷游戲代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • 微信小程序身份證驗證方法實現(xiàn)詳解

    微信小程序身份證驗證方法實現(xiàn)詳解

    這篇文章主要介紹了微信小程序身份證驗證方法實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-06-06
  • js購物車實現(xiàn)思路及代碼(個人感覺不錯)

    js購物車實現(xiàn)思路及代碼(個人感覺不錯)

    提起購物車想必只有在一些購物網(wǎng)站上才可以看得到,下面為大家介紹下使用js實現(xiàn)的購物車,感興趣的朋友可以參考下
    2013-12-12
  • JavaScript利用虛擬列表實現(xiàn)高性能渲染數(shù)據(jù)詳解

    JavaScript利用虛擬列表實現(xiàn)高性能渲染數(shù)據(jù)詳解

    在前文中我們提到可以使用時間分片的方式來對長列表進行渲染,但這種方式更適用于列表項的DOM結(jié)構(gòu)十分簡單的情況,所以本文來講講如何使用虛擬列表的方式,來同時加載大量數(shù)據(jù)吧
    2023-05-05
  • 控制頁面按鈕在后臺執(zhí)行期間不重復(fù)提交的JS方法

    控制頁面按鈕在后臺執(zhí)行期間不重復(fù)提交的JS方法

    下面的代碼可以避免這種情況的發(fā)生,要等第一次執(zhí)行完返回數(shù)據(jù)到前臺后才能提交第二次。
    2013-06-06
  • BootStrap table使用方法分析

    BootStrap table使用方法分析

    這篇文章主要為大家詳細介紹了JS組件Bootstrap Table使用方法,具有一定的實用性和參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 百度空間的popup效果分析

    百度空間的popup效果分析

    自從用firefox瀏覽器以來,就幾乎養(yǎng)成了一個習慣,就想用WebDeveloper把一些漂亮網(wǎng)站的js包括css給down下來分析一下,用來學習。
    2008-10-10
  • js滾動條回到頂部的代碼

    js滾動條回到頂部的代碼

    js滾動條回到頂部的代碼,里面的js代碼比較簡單,很適合學習。
    2011-12-12

最新評論

延吉市| 榕江县| 阿克苏市| 平泉县| 东台市| 孟州市| 南溪县| 汤阴县| 偃师市| 长海县| 托克逊县| 屏山县| 鸡西市| 榆中县| 衡阳县| 仪征市| 紫金县| 德江县| 南陵县| 乐安县| 绥芬河市| 临清市| 通海县| 浮山县| 磴口县| 泾阳县| 化州市| 苏尼特左旗| 固始县| 马鞍山市| 鲁山县| 达拉特旗| 思南县| 安达市| 江达县| 潢川县| 潼关县| 吴忠市| 鄂伦春自治旗| 孙吴县| 建瓯市|