精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Dojo1.6新特性:AMD規范

開發 前端
AMD 規范是JavaScript開發的一次重要嘗試,它以簡單而優雅的方式統一了JavaScript的模塊定義和加載機制,并迅速得到很多框架的認可和采納。這對開發人員來說是一個好消息,通過AMD我們降低了學習和使用各種框架的門檻,能夠以一種統一的方式去定義和使用模塊,提高開發效率,降低了應用維護成本。

前端技術雖然在不斷發展之中,卻一直沒有質的飛躍。除了已有的各大著名框架,比如Dojo,JQuery,ExtJs等等,很多公司也都有著自己的前端開發框架。這些框架的使用效率以及開發質量在很大程度上都取決于開發者對其的熟悉程度,以及對JavaScript的熟悉程度,這也是為什么很多公司的技術帶頭人都喜歡開發一個自己的框架。開發一個自己會用的框架并不難,但開發一個大家都喜歡的框架卻很難。從一個框架遷移到一個新的框架,開發者很有可能還會按照原有框架的思維去思考和解決問題。這其中的一個重要原因就是JavaScript本身的靈活性:框架沒辦法絕對的約束你的行為,一件事情總可以用多種途徑去實現,所以我們只能在方法學上去引導正確的實施方法。慶幸的是,在這個層面上的軟件方法學研究,一直有人在去不斷的嘗試和改進,CommonJS就是其中的一個重要組織。他們提出了許多新的JavaScript架構方案和標準,希望能為前端開發提供銀蛋,提供統一的指引。

AMD規范就是其中比較著名一個,全稱是Asynchronous Module Definition,即異步模塊加載機制。從它的規范描述頁面看,AMD很短也很簡單,但它卻完整描述了模塊的定義,依賴關系,引用關系以及加載機制。從它被requireJS,NodeJs,Dojo,JQuery使用也可以看出它具有很大的價值,沒錯,JQuery近期也采用了AMD規范。在這篇文章中,我們就將介紹AMD的性質,用法,優勢以及應用場景。從AMD中我們也能學習到如何在更高層面去設計自己的前端應用。

1. AMD是什么

作為一個規范,只需定義其語法API,而不關心其實現。AMD規范簡單到只有一個API,即define函數:

define([module-name?], [array-of-dependencies?], [module-factory-or-object]);

其中:

◆  module-name: 模塊標識,可以省略。

◆  array-of-dependencies: 所依賴的模塊,可以省略。

◆  module-factory-or-object: 模塊的實現,或者一個JavaScript對象。

從中可以看到,***個參數和第二個參數都是可以省略的,第三個參數則是模塊的具體實現本身。后面將介紹在不同的應用場景下,他們會使用不同的參數組合。

從這個define函數AMD中的A:Asynchronous,我們也不難想到define函數具有的另外一個性質,異步性。當define函數執行時,它首先會異步的去調用第二個參數中列出的依賴模塊,當所有的模塊被載入完成之后,如果第三個參數是一個回調函數則執行,然后告訴系統模塊可用,也就通知了依賴于自己的模塊自己已經可用。如果對應到dojo1.6之前的實現,那么在功能上可以有如下對應關系:

◆  module-name: dojo.provide

◆  dependencies: dojo.require

◆  module-factory: dojo.declare

不同的是,在加載依賴項時,AMD用的是異步,而dojo.require是同步。異步和同步的區別顯而易見,前者不會阻塞瀏覽器,有更好的性能和靈活性。而對于NodeJs這樣的服務器端AMD,則模塊載入無需阻塞服務器進程,同樣提高了性能。

2. AMD實例:如何定義一個模塊

下面代碼定義了一個alpha模塊,并且依賴于內置的require,exports模塊,以及外部的beta模塊。可以看到,第三個參數是回調函數,可以直接使用依賴的模塊,他們按依賴聲明順序作為參數提供給回調函數。

這里的require函數讓你能夠隨時去依賴一個模塊,即取得模塊的引用,從而即使模塊沒有作為參數定義,也能夠被使用;exports是定義的alpha 模塊的實體,在其上定義的任何屬性和方法也就是alpha模塊的屬性和方法。通過exports.verb = ...就是為alpha模塊定義了一個verb方法。例子中是簡單調用了模塊beta的verb方法。

  1. define("alpha", ["require", "exports", "beta"], function (require, exports, beta) {  
  2.     exports.verb = function() {  
  3.         return beta.verb();  
  4.         //或者:  
  5.         return require("beta").verb();  
  6.     }  
  7. }); 

3. 匿名模塊

define 方法允許你省略***個參數,這樣就定義了一個匿名模塊,這時候模塊文件的文件名就是模塊標識。如果這個模塊文件放在a.js中,那么a就是模塊名。可以在依賴項中用"a"來依賴于這個匿名模塊。這帶來一個好處,就是模塊是高度可重用的。你拿來一個匿名模塊,隨便放在一個位置就可以使用它,模塊名就是它的文件路徑。這也很好的符合了DRY(Don't Repeat Yourself)原則。

下面的代碼就定義了一個依賴于alpha模塊的匿名模塊:

  1. define(["alpha"], function (alpha) {  
  2.     return {  
  3.       verb: function(){  
  4.         return alpha.verb() + 2;  
  5.       }  
  6.     };  
  7. }); 

#p#

4. 僅有一個參數的define

前面提到,define的前兩個參數都是可以省略的。第三個參數有兩種情況,一種是一個JavaScript對象,另一種是一個函數。

如果是一個對象,那么它可能是一個包含方法具有功能的一個對象;也有可能是僅提供數據。后者和JSON-P非常類似,因此AMD也可以認為包含了一個完整的 JSON-P實現。模塊演變為一個簡單的數據對象,這樣的數據對象是高度可用的,而且因為是靜態對象,它也是CDN友好的,可以提高JSON-P的性能。考慮一個提供中國省市對應關系的JavaScript對象,如果以傳統JSON-P的形式提供給客戶端,它必須提供一個callback函數名,根據這個函數名動態生成返回數據,這使得標準JSON-P數據一定不是CDN友好的。但如果用AMD,這個數據文件就是如下的形式:

  1. define({    
  2.     provinces: [  
  3.     {  
  4.         name: '上海',   
  5.         areas: ['浦東新區', '徐匯區']},  
  6.     {  
  7.         name: '江蘇',   
  8.         cities: ['南京', '南通']}  
  9.         //.....    
  10.     ]  
  11. }); 

假設這個文件名為china.js,那么如果某個模塊需要這個數據,只需要:

  1. define(['china', function(china){  
  2.     //在這里使用中國省市數據  
  3. }); 

通過這種方式,這個模塊是真正高度可復用的,無論是用遠程的,還是Copy到本地項目,都節約了開發時間和維護時間。

如果參數是一個函數,其用途之一是快速開發實現。適用于較小型的應用,你無需提前關注自己需要什么模塊,自己給誰用。在函數中,可以隨時require自己需要的模塊。例如:

  1. define(function(){  
  2.     var p = require('china');  
  3.     //使用china這個模塊  
  4. }); 

即你省略了模塊名,以及自己需要依賴的模塊。這不意味著你無需依賴于其他模塊,而是可以讓你在需要的時候去require這些模塊。define方法在執行的時候,會調用函數的toString方法,并掃描其中的require調用,提前幫助你載入這些模塊,載入完成之后再執行。這使得快速開發成為可能。需要注意的一點是,Opera不能很好的支持函數的toString方法,因此,在瀏覽器中它的適用性并不是很強。但如果你是通過build工具打包所有的 JavaScript文件,這將不是問題,構建工具會幫助你掃描require并強制載入依賴的模塊。

5. Dojo中的AMD

Dojo 在三月初正式發布了1.6版本,其中一個重要的變化就是引入了AMD機制,取代了原來的dojo.provide和dojo.require方法。但是現在仍然保持了向后兼容性,你仍然可以用dojo.provide和dojo.require來定義和加載模塊。需要注意的是:在 Dojo 1.6 中, 針對 AMD 的重構仍然屬于一個過渡期的改動 , 用戶自己開發的 AMD 模塊還不能被 Dojo 的加載器和 Build 系統支持 . 1.6 中現有的編譯系統對AMD的支持還非常局限。 如果你自己開發了 AMD 格式的模塊,并且你仍然在使用默認的 Dojo 同步模塊加載器,那么你必須嚴格遵循 Dojo 模塊的格式 ( 包括換行的格式 ) 來保證你自己的模塊能夠成功編譯。總結起來有以下三點:

◆  用傳統的方法 (dojo.require()/dojo.provide()) – 這些模塊,只能被 Dojo 同步加載器 加載,但可以被 Dojo 編譯系統(Build System )正確的編譯

◆  用 Dojo 同步加載器來加載 AMD 格式 ( define ()) 模塊 – 這些模塊可以被正常的加載,并且可以被其他兼容 AMD 格式的加載器加載 . 現在雖然 Dojo1.6 還沒有正式支持這種用法, 但在目前的 Dojo1.6 編譯系統中,是可以正常工作的 . ( 前提是你必須嚴格遵循 Dojo 模塊定義的代碼規范 )

◆  使用第三方加載器來加載 AMD 格式( define ())模塊 – 模塊可以被正常加載,并且可以被其他加載器所使用 . 這些模塊可以使用 RequireJS 或 Backdraft 提供的編譯系統正常編譯,但是 Dojo 還沒有正式的測試過和其他加載器的兼容性 .

以Calendar為例,用define方法來定義這個模塊:

  1. define("dijit/Calendar",   
  2.     ["dojo", "dijit", "text!dijit/templates/Calendar.html",   
  3.     "dojo/cldr/supplemental", "dojo/date", "dojo/date/locale",  
  4.     "dijit/_Widget", "dijit/_Templated", "dijit/_CssStateMixin", "dijit/form/DropDownButton"],   
  5.     function(dojo, dijit) {   
  6.         dojo.declare(  
  7.             "dijit.Calendar",  
  8.             [dijit._Widget, dijit._Templated, dijit._CssStateMixin],  
  9.             {...}  
  10.         );  
  11.         return dijit.Calendar;  
  12.     }  
  13. ); 

可以看到,模塊標識就是模塊文件的路徑,模塊本身一般都是dojo.declare定義的類。Dojo1.6中的dojo和dijit命名空間下的模塊均已經用AMD的形式進行了重構,但dojox下仍然延用了傳統的dojo.provide和dojo.require形式。對AMD的引入是Dojo走向自動化包管理的重要一步,在后續文章中我們也將繼續關注Dojo在這方面的進展。

【編輯推薦】

  1. Dojo1.6新特性:HTML 5進行時
  2. 拖拽:從 Dojo 到 HTML 5
  3. 用Dojo實現Ajax請求:XHR、跨域、及其他
  4. 麻雀雖小五臟俱全 Dojo自定義控件應用
  5. HTML 5的革新:結構之美
責任編輯:陳貽新 來源: infoq
相關推薦

2011-04-25 14:20:49

DojoHTML 5

2011-04-22 15:02:19

HTML5Dojo

2010-05-17 10:05:55

Subversion1

2009-07-07 12:30:38

JDK1.6

2009-09-27 10:00:00

OSGi 4.2

2021-04-23 07:20:42

LinuxSD卡電源

2012-11-08 09:45:44

JavaScriptrequireJS

2009-06-03 16:10:34

OpenSolaris

2024-09-11 09:30:58

IDEA工具編程

2014-07-15 14:48:26

Java8

2012-03-12 16:23:01

javascript

2022-12-28 08:16:30

CSS新規范樣式

2021-02-22 11:51:15

Java開發代碼

2009-01-16 10:01:57

MySQL復制特性測試

2009-11-12 11:07:58

AMD皓龍4000AMD皓龍6000

2024-02-01 13:05:00

C++11C++編程

2013-03-05 09:35:54

Linux

2012-05-18 14:36:50

Fedora 17桌面環境

2011-11-08 10:17:34

Ubuntu 12.0特性

2013-07-29 15:13:35

點贊
收藏

51CTO技術棧公眾號

日韩精品极品| www.狠狠干| 精品久久久久久久久久久下田| 日本道免费精品一区二区三区| 亚洲视频在线二区| 亚洲精品中文字幕成人片| 国产农村妇女精品一二区| 国产亚洲精品91在线| 男女视频在线观看网站| 91破解版在线观看| 久久丝袜美腿综合| 91视频国产高清| 亚洲欧美偷拍一区| 欧美.www| 色哟哟网站入口亚洲精品| 久久人妻少妇嫩草av蜜桃| 性欧美hd调教| 亚洲成人免费观看| 在线观看成人av电影| 手机在线观看毛片| 国产在线一区观看| 国产不卡在线观看| 国产中文字字幕乱码无限| 国产剧情在线观看一区| 精品免费视频.| 一女二男3p波多野结衣| 日韩大片免费观看| 一区二区高清在线| 亚洲一区二区免费视频软件合集| 日本xxxx人| 国产精品夜夜嗨| 国产免费一区二区三区在线观看 | 久久露脸国产精品| 91免费在线看片| 亚洲欧洲免费| 亚洲黄色片网站| gogo亚洲国模私拍人体| 欧美激情福利| 欧美色精品在线视频| 99热成人精品热久久66| 白浆在线视频| 亚洲国产视频a| www国产无套内射com| 精品麻豆一区二区三区| 中文字幕不卡三区| 午夜精品一区二区三区四区 | 波多野结衣绝顶大高潮| 国产精品视频| 欧美一区二区.| 国产专区第一页| 一区二区三区导航| 久久人91精品久久久久久不卡| 精品无码久久久久成人漫画| 99久久精品费精品国产| 色婷婷成人综合| 国产一级淫片久久久片a级| 精品亚洲成人| 日韩小视频在线观看| 亚洲欧美另类日本| 婷婷综合久久| 九九热最新视频//这里只有精品 | 久草在现在线| 国产色爱av资源综合区| 日韩高清av| 中文字幕在线播放| 18欧美亚洲精品| 最新黄色av网站| 欧美人与牲禽动交com| 亚洲综合成人在线视频| 人人妻人人澡人人爽欧美一区双| 丁香高清在线观看完整电影视频| 亚洲影视资源网| 日韩国产欧美亚洲| 网友自拍亚洲| 欧美高清www午色夜在线视频| 国产不卡的av| 国产伦精品一区二区三区在线播放 | 欧美日韩在线中文| 香蕉成人影院| 91精品国产色综合久久不卡电影 | 欧洲vs亚洲vs国产| 亚洲免费视频在线观看| 欧美另类69xxxx| 欧美一区二区| 欧美专区日韩视频| 在线免费观看日韩视频| 国产高清精品网站| 久久艳妇乳肉豪妇荡乳av| h视频在线播放| 一区二区三区久久久| 久久精品免费一区二区| 青草综合视频| 亚洲国产日韩欧美在线动漫| 99久久99久久精品免费看小说.| 欧美日韩一卡| 国产成人精品午夜| 国产成人久久精品77777综合| av成人免费在线| 亚洲欧美影院| 97在线超碰| 欧美精品一卡两卡| 中文字幕在线免费看线人| 国产精品99视频| 4k岛国日韩精品**专区| 国产情侣av在线| 久久精品欧美一区二区三区不卡 | 加勒比婷婷色综合久久| 国产亚洲午夜| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲人在线观看视频| 亚洲婷婷在线视频| 黄色一级一级片| 99热这里只有精品首页| 最新亚洲国产精品| 一级片在线观看免费| 成人综合婷婷国产精品久久蜜臀| 婷婷久久伊人| 国产精品xx| 日韩欧美第一区| 在线观看天堂av| 石原莉奈在线亚洲三区| 国产无套精品一区二区| 91国内在线| 欧美欧美欧美欧美| 中文字幕一区二区三区人妻不卡| 午夜久久tv| 国产在线视频一区| 国产黄在线看| 狠狠色狠色综合曰曰| 折磨小男生性器羞耻的故事| 久久久五月天| 国产在线视频一区| 日本在线免费网| 欧美在线观看视频在线| 国产男男chinese网站| 狠狠噜噜久久| 97人人澡人人爽| 免费av网站在线观看| 欧美在线视频你懂得| 国产传媒第一页| 日韩午夜av在线| 国产亚洲精品久久飘花| 日本片在线看| 日韩欧美国产综合| xxxx日本少妇| 国产高清视频一区| www.日本三级| 91麻豆精品国产91久久久久推荐资源| 久久国产精品久久国产精品| 97超碰资源站| 亚洲人被黑人高潮完整版| 日本77777| 国产高清欧美| 99久久综合狠狠综合久久止| 日本不卡影院| 亚洲精品一线二线三线| 日本一区二区网站| av资源网一区| 免费激情视频在线观看| 日韩av字幕| 国产91色在线|免| 国产特黄在线| 欧美猛男gaygay网站| 成熟的女同志hd| 国产91露脸合集magnet| 99在线免费视频观看| 欧美电影在线观看完整版| 5566日本婷婷色中文字幕97| 国产小视频在线| 欧美午夜一区二区三区免费大片| 国产精品18在线| 久久99久久99| 福利在线一区二区| 亚洲免费专区| 成人午夜两性视频| 91jq激情在线观看| 亚洲性猛交xxxxwww| 亚洲专区在线播放| 玉足女爽爽91| 97伦伦午夜电影理伦片| 久久精品国产亚洲高清剧情介绍| 久久久无码中文字幕久...| 久草在线综合| 国产精品观看在线亚洲人成网| 亚洲成人三级| 精品国产一区二区在线观看| 国产又黄又粗又爽| 国产精品视频麻豆| 美女流白浆视频| 蜜桃久久av| 好色先生视频污| 色天下一区二区三区| 国产精品自拍偷拍| 久久一卡二卡| 在线播放精品一区二区三区 | 中文字幕第99页| 亚洲精品你懂的| 国产又粗又猛又色| 久久99精品久久久久久动态图| 给我免费播放片在线观看| 欧美日韩亚洲在线观看| 国产精品青青草| 日韩色性视频| 亲子乱一区二区三区电影| av在线播放观看| 一本色道久久综合亚洲精品小说| 精品国产av鲁一鲁一区| 日本乱人伦aⅴ精品| 国产一二三四在线| 国产精品国产三级国产普通话三级 | 日本在线视频www色| 伊人成综合网yiren22| 91精品一区二区| 性高爱久久久久久久久| 欧美精品激情在线观看| 日韩子在线观看| 亚洲男人天堂视频| 黄色av免费观看| 91麻豆精品国产91久久久久久久久| 成人免费毛片男人用品| 亚洲午夜在线视频| www.毛片com| 国产精品入口麻豆九色| 37p粉嫩大胆色噜噜噜| 国产91丝袜在线18| 天堂av手机在线| 美女一区二区视频| 日韩在线第三页| 亚洲综合日韩| 日韩中文字幕在线视频观看| 国产精品videosex极品| 99精品一级欧美片免费播放| 999久久久精品国产| 视频一区二区三| 免费欧美一区| 欧美日韩在线高清| 欧美三级午夜理伦三级在线观看 | 成年人视频在线看| 亚洲美女av在线播放| 亚洲av毛片成人精品| 亚洲成人aaa| 亚洲卡一卡二卡三| 精品剧情在线观看| 亚洲av无码一区二区三区dv| 日韩欧美一级二级三级久久久| 一区二区不卡视频在线观看| 欧美视频精品在线| 亚洲视频在线免费播放| 欧美日韩中文字幕精品| 中文字幕+乱码+中文乱码www| 色域天天综合网| 日本免费精品视频| 91久久奴性调教| 中文在线免费观看| 欧美久久久久久久久久| 国产精品自偷自拍| 欧美日韩高清一区二区三区| 国产精品系列视频| 日韩女优av电影| 亚洲黄色在线免费观看| 亚洲成人av片在线观看| 熟妇人妻av无码一区二区三区| 亚洲精品v天堂中文字幕| 香蕉av一区二区三区| 亚洲另类欧美自拍| www.亚洲免费| 久久这里有精品视频| 男女视频在线| 97香蕉久久超级碰碰高清版| 欧美粗大gay| 国产精品视频地址| 精品午夜av| 狠狠色噜噜狠狠狠狠色吗综合| 妖精视频一区二区三区| 亚洲国产欧美不卡在线观看 | 日韩免费毛片视频| 美女视频黄免费的久久| 欧美日韩久久婷婷| 成人网在线播放| 亚洲一区二区观看| 中文字幕免费不卡| 欧美精品99久久久| 狠狠操狠狠色综合网| 中文字幕在线观看视频一区| 日韩一级大片在线| 日本一本草久在线中文| 中文字幕自拍vr一区二区三区| av网站导航在线观看免费| 性色av一区二区三区免费| 主播大秀视频在线观看一区二区| 91久久久久久久久久久久久| 老司机成人在线| 亚洲视频精品一区| 在线综合亚洲| 中文字幕在线视频精品| 95精品视频在线| 国产日产精品一区二区三区的介绍| 午夜欧美在线一二页| 艳妇乳肉豪妇荡乳av| 亚洲国产另类久久精品| 日本高清视频在线观看| **欧美日韩vr在线| 二区三区精品| 奇米视频888战线精品播放| 亚洲欧美一级二级三级| 国产成人手机视频| 成人午夜激情视频| 亚欧精品视频一区二区三区| 亚洲成av人片| av网站在线观看免费| 亚洲天堂av在线免费| av在线最新| 91嫩草国产在线观看| 久久国产中文字幕| 虎白女粉嫩尤物福利视频| 国产成人av一区二区三区在线| 四虎国产成人精品免费一女五男| 精品国产乱码久久久久久天美| 99久久久国产精品无码免费| 这里只有精品丝袜| 69久成人做爰电影| 国产日韩三区| 欧美一区二区三区少妇| 蜜桃视频免费观看一区| 小毛片在线观看| 亚洲精品免费看| 国产精品伊人久久| 一区二区三区精品99久久| 欧美裸体视频| 国产一区二区三区奇米久涩| 欧美啪啪一区| 先锋资源在线视频| 亚洲欧美视频在线观看视频| 在线观看毛片网站| 伊人久久久久久久久久久久久| 国产高清不卡| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 91成人破解版| 一本色道综合亚洲| 青梅竹马是消防员在线| 欧美亚洲成人网| 美女一区二区在线观看| 免费不卡av在线| hitomi一区二区三区精品| 国产精彩视频在线观看| 精品国产自在久精品国产| 牛牛电影国产一区二区| www.久久爱.cn| 亚洲性人人天天夜夜摸| 中国免费黄色片| 欧美日韩美女在线观看| 牛牛热在线视频| 国产精品黄色av| 久久中文字幕二区| 成年人三级黄色片| 亚洲欧美日韩一区二区| 国产丰满美女做爰| 欧美国产极速在线| 久久精品国产亚洲5555| 欧美性大战久久久久xxx | 精品欧美一区二区久久| av电影院在线看| 蜜桃av噜噜一区二区三| 免费在线观看视频一区| 亚洲波多野结衣| 日韩欧美一级片| 伊人网在线播放| 亚洲欧美日产图| 国产精品一二三四五| 日韩 欧美 亚洲| 亚洲性69xxxbbb| 日韩高清二区| 91国视频在线| 国产精品亲子乱子伦xxxx裸| 精品国产av 无码一区二区三区 | 激情亚洲影院在线观看| 亚洲高清资源综合久久精品| 国产一区二区三区免费在线观看| 免费看一级一片| 亚洲欧美日韩中文在线制服| 欧美日韩伦理一区二区| 成人小视频在线观看免费| 91网上在线视频| 在线观看免费观看在线| 欧美激情欧美激情| 国产精品片aa在线观看| 一级黄色大片儿| 色欲综合视频天天天| 1024在线播放| 欧美日韩三区四区| 国产一区二区在线观看免费| 尤物视频在线观看国产| 色妞色视频一区二区三区四区| 卡一精品卡二卡三网站乱码| 91国产精品视频在线观看| 亚洲线精品一区二区三区八戒| 国外av在线| 国产精品二区在线观看| 美女mm1313爽爽久久久蜜臀| 国产大片aaa|