一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Dojo與jQuery綜合比較分析

 埃德溫會(huì)館 2012-06-29

Dojo與jQuery綜合比較分析

分類: 綜合 Javascript Dojo核心(dojo) 1923人閱讀 評(píng)論(7) 收藏 舉報(bào)

最近Dojo和jQuery雙雙發(fā)布了最新的1.8版本,有著相同版本號(hào)的兩個(gè)Javascript庫(kù)也有許多核心的相同之處:相同的資源加載機(jī)制AMD、相同的選擇器 引擎Sizzle等。作為業(yè)界知名的Javascript庫(kù),Dojo和jQuery在各自領(lǐng)域有著為數(shù)眾多的擁護(hù)者。不過正所謂一把鑰匙開一把鎖,對(duì)一個(gè)項(xiàng)目來說肯定有個(gè)最適合它的工具庫(kù),用對(duì)了工具才能事半功倍。所以對(duì)項(xiàng)目經(jīng)理或是技術(shù)總監(jiān)來說,工程開始前的技術(shù)選型是關(guān)鍵一步,本文將對(duì)Dojo和 jQuery最新版本進(jìn)行一個(gè)綜合比較,重點(diǎn)在于區(qū)分兩者的適用場(chǎng)景,而不涉及討論孰優(yōu)孰劣。

Licence

Dojo和jQuery都屬于活躍的開源項(xiàng)目,并且都使用自由度很高的開源協(xié)議,可以免費(fèi)使用,沒有費(fèi)用和許可問題。Dojo 許可協(xié)議為BSD&AFL,jQuery許可協(xié)議為MIT&GPL。

框架組成

Dojo屬于重量級(jí)開發(fā)框架,由框架核心(dojo)、基本控件庫(kù)(dijit)、擴(kuò)展包(dojox)組成的,三部分都是由dojo官方提供。

jQuery屬于輕量級(jí)框架,本身僅包含框架核心,另外有一個(gè)與jQuery名下的獨(dú)立開源項(xiàng)目jQuery UI,它提供了最常用的8個(gè)控件。

另外jQuery的第三方開發(fā)者基于jQuery的框架核心開發(fā)了許多擴(kuò)展控件和功能。不過這些第三方插件質(zhì)量參差不齊,許可方式不同,需要慎重選擇和使用。當(dāng)選擇了多家提供的插件時(shí),還需要注意這些插件共存的兼容性問題。

總體來說,jQuery以及jQueryUI源于官方開發(fā),比第三方插件更值得信賴,jQueryUI秉承了jQuery小塊靈的特點(diǎn),適合Web快速開發(fā)。不過鑒于jQueryUI提供控件數(shù)量上的限制,進(jìn)行對(duì)UI交互依賴較重的應(yīng)用時(shí)略顯力不從心。

核心包大小

下圖是Dojo與jQuery框架核心的大小比較,壓縮后的dojo核心是135K,jQuery是93K。


編程風(fēng)格

Dojo使用面向?qū)ο缶幊谭绞?,為大型?yīng)用開發(fā)提供了保證;jQuery使用函數(shù)式編程方式,開發(fā)小型應(yīng)用時(shí)更加靈活快捷。

Javascript 自身使用原型鏈模擬繼承,但僅僅依靠原型鏈模擬的類繼承不能提供全面的面向?qū)ο竽芰?。Dojo在Javascript的基礎(chǔ)進(jìn)行了面向?qū)ο竽芰Φ募訌?qiáng)和規(guī) 范化,提供了原生Javascript不具備的面向?qū)ο缶幊棠芰Γ热绺割惙椒ㄖ剌d(注意,不是重寫)、多繼承、構(gòu)造函數(shù)調(diào)用鏈等等,并提供一系列面向?qū)ο缶幊桃?guī)范的函數(shù)和屬性declare、inherit、declaredClass、extend等作為dojo自身的編程基礎(chǔ)。在dojo中,所有的 UI控件都被定義為類,許多Dojo的核心功能庫(kù)也被定義為類,這都是出于更好的代碼重用性的考慮。

Javascript從本質(zhì)上來說屬于函數(shù)式編程語(yǔ)言,jQuery沒有改變Javascript的編程方式,使其學(xué)習(xí)成本大大降低。

常用功能支持情況

下圖中數(shù)據(jù)來源自wiki,包含了一些流行的Javascript框架對(duì)于Web項(xiàng)目開發(fā)中經(jīng)常會(huì)出現(xiàn)的功能需求的支持情況。本文僅涉及dojo與jQuery,其他框架的支持情況請(qǐng)看原文鏈接(http://en./wiki/Comparison_of_JavaScript_frameworks)

 

Dojo

jQuery

版本

1.7.2

1.7.2

代碼組成

JavaScript + HTML

JavaScript

瀏覽器功能檢測(cè)

Yes

Yes

DOM API包裝

Yes

Yes

XMLHttpRequest

Yes

Yes

JSONP技術(shù)

Yes

Yes

接收服務(wù)器推送數(shù)據(jù)

Yes

Yes

其他數(shù)據(jù)格式支持

Yes: XML, HTML, CSV, ATOM

Yes: XML, HTML

拖拽功能

Yes

Yes

頁(yè)面視覺特效

Yes

Yes

事件綁定

Yes

Yes

動(dòng)作撤銷/行為歷史管理

Yes

With plugins

輸入驗(yàn)證

Yes

With plugins

表格(Grid)控件

Yes

With plugins

樹控件

Yes

With plugins

編輯器控件

Yes

With plugins

自動(dòng)補(bǔ)全輸入

Yes

With plugins

HTML生成器

Yes

Yes

自定義控件主題

Yes

Yes

Modal Dialog & Resizable Panel

Yes

With plugins

布局控件

Yes

With plugin

Canvas

Yes

 

手持設(shè)備支持

Yes

With plugin

Accessibility

Yes

Yes

ARIA支持

Yes

Yes

可視化編程工具

Yes

Yes

離線存儲(chǔ)

No

No

跨瀏覽器的矢量繪圖

Yes

 

圖表控件

Yes

With plugin

Internet Explorer

6+

6+

Mozilla Firefox

3+

2+

Safari

4

3+

Opera

10.50 only

9+

Chrome

3

1+

由上圖可見,dojo作為重量級(jí)的Javascript框架,提供了對(duì)絕大多數(shù)Web開發(fā)功能需求的支持。而jQuery除了對(duì)Web繪圖功能支持不夠以外,其余功能基本都可以通過引入第三方插件來提供支持。不過還是會(huì)涉及到前文提到的代碼協(xié)議問題和插件間的兼容性問題。

代碼風(fēng)格

從代碼風(fēng)格上來看,除去jQuery標(biāo)志性的“$”符號(hào)外,其實(shí)dojo與jQuery在一些常用API上的命名和參數(shù)列表基本相似。


核心代碼性能

Web應(yīng)用中的性能非常關(guān)鍵,dojo與jQuery在核心功能上的性能指標(biāo)在Javascript框架中都屬優(yōu)秀,那么他們之間的比較結(jié)果如何呢?本文將比較兩者在DOM操作、選擇器以及事件綁定這三個(gè)最常用功能上的性能指標(biāo)。場(chǎng)景如下:

1.  添加500個(gè)DOM節(jié)點(diǎn);

2.  改變添加節(jié)點(diǎn)的style屬性;

3.  在500個(gè)節(jié)點(diǎn)中選擇一部分節(jié)點(diǎn)改變其innerHTML;

4.  為每個(gè)節(jié)點(diǎn)綁定鼠標(biāo)事件;

這四步對(duì)應(yīng)的dojo代碼如下

[javascript] view plaincopy?
  1. function dojoStep1() {    
  2.     var html = "";    
  3.     for (var i = 0; i < 500; i++) {    
  4.         html += "<div><span class=test data=0>" + i + "</span></div>";    
  5.     }    
  6.     dojo.byId("container").innerHTML = html;    
  7. }    
  8.     
  9. function dojoStep2 () {    
  10.     dojo.query(".test""container").style("color","red" );    
  11. }    
  12.     
  13. function dojoStep3() {    
  14.     dojo.query("#container div:nth-child(odd)").addContent("<span>odd row:</span>");    
  15.     dojo.query("#container div:nth-child(even)").addContent("<span>even row:</span>");    
  16. }    
  17.     
  18. function dojoStep4() {    
  19.     dojo.query("#container span").on("mouseenter,mouseleave"function(e){    
  20.         if(e.type == "mouseenter"){    
  21.             dojo.style(e.target, "color""blue");        
  22.     }  
  23.     });  
  24. }  

四個(gè)步驟對(duì)應(yīng)的jQuery代碼如下:

[javascript] view plaincopy?
  1. function jQueryStep1() {    
  2.     var html = "";    
  3.     for (var i = 0; i < 500; i++) {    
  4.         html += "<div><span class=test data=0>" + i + "</span></div>";    
  5.     }    
  6.     $("#jContainer")[0].innerHTML = html;    
  7. }    
  8.     
  9. function jQueryStep2() {    
  10.     $("#jContainer .test").css({ color: "blue" });    
  11. }    
  12.     
  13. function jQueryStep3() {    
  14.     $("#jContainer div:even").append("<span>even row:</span>");    
  15.     $("#jContainer div:odd").append("<span>odd row:</span>");    
  16. }    
  17.     
  18. function jQueryStep4() {    
  19.     $("#jContainer span").hover(function () {    
  20.         $(this).css("color""red");    
  21.     }, function () {    
  22.         $(this).css("color""black");    
  23.     });    
  24. }  
Firefox/Chrome/IE8的測(cè)試結(jié)果如下所示:

根據(jù)Dojo1.7.2與jQuery1.7.2幾個(gè)核心函數(shù)的比較結(jié)果可見,dojo與jQuery的選擇器性能相差無幾,dojo略勝一籌。由于 dojo和jQuery中的選擇器就是dojo基金會(huì)下的項(xiàng)目Sizzle.js,所以這個(gè)結(jié)果也比較合理;從DOM操作來看,dojo的性能也優(yōu)于jQuery;在事件綁定方面,dojo的性能明顯高于jQuery。

總結(jié)

Dojo在眾多前臺(tái)框架中,屬于重量級(jí)開發(fā)框架,在面向?qū)ο笾С?,代碼架構(gòu),多極模塊加載機(jī)制,控件完整性等方面有著較為突出的特點(diǎn),適用于企業(yè)級(jí)或是復(fù)雜的大型Web應(yīng)用開發(fā);jQuery屬于輕量級(jí)開發(fā)框架,架構(gòu)和機(jī)制相對(duì)簡(jiǎn)單,易于開發(fā),應(yīng)用廣泛,適用于相對(duì)簡(jiǎn)單的Web 2.0開發(fā)。 Dojo和jQuery分別為復(fù)雜應(yīng)用開發(fā)和簡(jiǎn)單應(yīng)用開發(fā)設(shè)計(jì),由此也帶來二者一些技術(shù)特點(diǎn)的不同。從工具本身角度看,二者特點(diǎn)鮮明,在實(shí)際項(xiàng)目中,需要根據(jù)具體需求來衡量,進(jìn)行工具的選擇。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    久久99热成人网不卡| 蜜臀人妻一区二区三区| 一区二区三区欧美高清| 狠狠干狠狠操在线播放| 国产一级片内射视频免费播放| 国产中文字幕一区二区| 欧美乱码精品一区二区三| 中文字幕日韩一区二区不卡| 日本免费熟女一区二区三区| 国产成人精品国产成人亚洲 | 亚洲精品成人福利在线| 欧美激情视频一区二区三区| 五月综合婷婷在线伊人| 国产精品亚洲一级av第二区| 东京热一二三区在线免| 欧美一区二区三区性视频| 欧美午夜性刺激在线观看| 视频一区日韩经典中文字幕| 国产日韩欧美一区二区| 九九热在线免费在线观看| 国产精品大秀视频日韩精品| 久热在线视频这里只有精品| 亚洲欧美日韩网友自拍| 91亚洲精品国产一区| 熟女少妇一区二区三区蜜桃| 亚洲欧美视频欧美视频| 中文字幕日韩欧美亚洲午夜| 国产又粗又深又猛又爽又黄| 中国美女偷拍福利视频| 日本久久精品在线观看| 又色又爽又无遮挡的视频| 午夜视频成人在线免费| 国产一区国产二区在线视频| 日韩欧美国产亚洲一区| 果冻传媒精选麻豆白晶晶| 日韩精品中文字幕在线视频| 亚洲黄香蕉视频免费看| 精品国模一区二区三区欧美| 91精品国产品国语在线不卡| 欧美国产精品区一区二区三区| 久草精品视频精品视频精品|