`

Dojo与jQuery综合比较分析(转载)

阅读更多

 

最近Dojo和jQuery双双发布了最新的1.8版本,有着相同版本号的两个Javascript库也有许多核心的相同之处:相同的资源加载机制AMD、相同的选择器 引擎Sizzle等。作为业界知名的Javascript库,Dojo和jQuery在各自领域有着为数众多的拥护者。不过正所谓一把钥匙开一把锁,对一个项目来说肯定有个最适合它的工具库,用对了工具才能事半功倍。所以对项目经理或是技术总监来说,工程开始前的技术选型是关键一步,本文将对Dojo和 jQuery最新版本进行一个综合比较,重点在于区分两者的适用场景,而不涉及讨论孰优孰劣。

Licence

Dojo和jQuery都属于活跃的开源项目,并且都使用自由度很高的开源协议,可以免费使用,没有费用和许可问题。Dojo 许可协议为BSD&AFL,jQuery许可协议为MIT&GPL。

框架组成

Dojo属于重量级开发框架,由框架核心(dojo)、基本控件库(dijit)、扩展包(dojox)组成的,三部分都是由dojo官方提供。

jQuery属于轻量级框架,本身仅包含框架核心,另外有一个与jQuery名下的独立开源项目jQuery UI,它提供了最常用的8个控件。

另外jQuery的第三方开发者基于jQuery的框架核心开发了许多扩展控件和功能。不过这些第三方插件质量参差不齐,许可方式不同,需要慎重选择和使用。当选择了多家提供的插件时,还需要注意这些插件共存的兼容性问题。

总体来说,jQuery以及jQueryUI源于官方开发,比第三方插件更值得信赖,jQueryUI秉承了jQuery小块灵的特点,适合Web快速开发。不过鉴于jQueryUI提供控件数量上的限制,进行对UI交互依赖较重的应用时略显力不从心。

核心包大小

下图是Dojo与jQuery框架核心的大小比较,压缩后的dojo核心是135K,jQuery是93K。

 

编程风格

 

Dojo使用面向对象编程方式,为大型应用开发提供了保证;jQuery使用函数式编程方式,开发小型应用时更加灵活快捷。

Javascript 自身使用原型链模拟继承,但仅仅依靠原型链模拟的类继承不能提供全面的面向对象能力。Dojo在Javascript的基础进行了面向对象能力的加强和规 范化,提供了原生Javascript不具备的面向对象编程能力,比如父类方法重载(注意,不是重写)、多继承、构造函数调用链等等,并提供一系列面向对象编程规范的函数和属性declare、inherit、declaredClass、extend等作为dojo自身的编程基础。在dojo中,所有的 UI控件都被定义为类,许多Dojo的核心功能库也被定义为类,这都是出于更好的代码重用性的考虑。

Javascript从本质上来说属于函数式编程语言,jQuery没有改变Javascript的编程方式,使其学习成本大大降低。

常用功能支持情况

下图中数据来源自wiki,包含了一些流行的Javascript框架对于Web项目开发中经常会出现的功能需求的支持情况。本文仅涉及dojo与jQuery,其他框架的支持情况请看原文链接(http://en.wikipedia.org/wiki/Comparison_of_JavaScript_frameworks)

 

 

Dojo

jQuery

版本

1.7.2

1.7.2

代码组成

JavaScript + HTML

JavaScript

浏览器功能检测

Yes

Yes

DOM API包装

Yes

Yes

XMLHttpRequest

Yes

Yes

JSONP技术

Yes

Yes

接收服务器推送数据

Yes

Yes

其他数据格式支持

Yes: XML, HTML, CSV, ATOM

Yes: XML, HTML

拖拽功能

Yes

Yes

页面视觉特效

Yes

Yes

事件绑定

Yes

Yes

动作撤销/行为历史管理

Yes

With plugins

输入验证

Yes

With plugins

表格(Grid)控件

Yes

With plugins

树控件

Yes

With plugins

编辑器控件

Yes

With plugins

自动补全输入

Yes

With plugins

HTML生成器

Yes

Yes

自定义控件主题

Yes

Yes

Modal Dialog & Resizable Panel

Yes

With plugins

布局控件

Yes

With plugin

Canvas

Yes

 

手持设备支持

Yes

With plugin

Accessibility

Yes

Yes

ARIA支持

Yes

Yes

可视化编程工具

Yes

Yes

离线存储

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作为重量级的Javascript框架,提供了对绝大多数Web开发功能需求的支持。而jQuery除了对Web绘图功能支持不够以外,其余功能基本都可以通过引入第三方插件来提供支持。不过还是会涉及到前文提到的代码协议问题和插件间的兼容性问题。

代码风格

从代码风格上来看,除去jQuery标志性的“$”符号外,其实dojo与jQuery在一些常用API上的命名和参数列表基本相似。

 


 

核心代码性能

Web应用中的性能非常关键,dojo与jQuery在核心功能上的性能指标在Javascript框架中都属优秀,那么他们之间的比较结果如何呢?本文将比较两者在DOM操作、选择器以及事件绑定这三个最常用功能上的性能指标。场景如下:

1.  添加500个DOM节点;

2.  改变添加节点的style属性;

3.  在500个节点中选择一部分节点改变其innerHTML;

4.  为每个节点绑定鼠标事件;

这四步对应的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. }  

 

四个步骤对应的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的测试结果如下所示:

 

 

 

根据Dojo1.7.2与jQuery1.7.2几个核心函数的比较结果可见,dojo与jQuery的选择器性能相差无几,dojo略胜一筹。由于 dojo和jQuery中的选择器就是dojo基金会下的项目Sizzle.js,所以这个结果也比较合理;从DOM操作来看,dojo的性能也优于jQuery;在事件绑定方面,dojo的性能明显高于jQuery。

总结

Dojo在众多前台框架中,属于重量级开发框架,在面向对象支持,代码架构,多极模块加载机制,控件完整性等方面有着较为突出的特点,适用于企业级或是复杂的大型Web应用开发;jQuery属于轻量级开发框架,架构和机制相对简单,易于开发,应用广泛,适用于相对简单的Web 2.0开发。 Dojo和jQuery分别为复杂应用开发和简单应用开发设计,由此也带来二者一些技术特点的不同。从工具本身角度看,二者特点鲜明,在实际项目中,需要根据具体需求来衡量,进行工具的选择。

 

原文地址:http://blog.csdn.net/dojotoolkit/article/details/7682978

分享到:
评论

相关推荐

    Dojo vs jQuery 比较

    Dojo和jQuery是两个备受关注的JavaScript库,它们各自具有独特的特性和优势。这篇文章将对这两个工具进行深入比较,帮助开发者理解它们之间的差异,以便做出更适合项目需求的选择。 首先,Dojo是一个全面的...

    四种时兴的框架jQuery,Mootools,Dojo,ExtJS的对比

    四种时兴的框架jQuery,Mootools,Dojo,ExtJS的对比

    小议JavaScript库——Dojo、jQuery和PrototypeJS的比较.pdf

    JavaScript 库比较 —— Dojo、jQuery 和 PrototypeJS 在当今的 Web 开发中,JavaScript 库扮演着越来越重要的角色。这些库提供了许多有用的功能,可以帮助开发者快速构建 Web 应用程序。本文将对 Dojo、jQuery 和 ...

    dojo类机制实现原理分析

    ### Dojo类机制实现原理分析 #### 一、概述 Dojo框架是一个强大的JavaScript库,它不仅提供了丰富的用户界面组件,还内置了一套强大的类机制。本文旨在深入探讨Dojo类机制背后的实现原理,包括其类声明方式、继承...

    dojo dojo实例 dojo例子 dojo资料 dojo项目 dojo实战 dojo模块 dojo编程

    8. **dojo/data**:提供了一种数据模型接口,用于与各种数据源进行交互,比如从服务器获取数据。 9. **dojo/xhr**:处理AJAX请求的模块,如`dojo/xhrGet`和`dojo/xhrPost`,支持异步和同步请求,以及XML、JSON等...

    四种流行的AJAX框架jQuery_Mootools_Dojo_ExtJS的对比

    ### 四种流行的AJAX框架对比分析:jQuery, Mootools, Dojo, ExtJS #### 一、jQuery **主页**: &lt;http://jquery.com/&gt; **设计思想**: - **简洁性**: 几乎所有操作都始于选择DOM元素,并对其进行操作(支持Chaining...

    Struts 2.2.1的Ajax整合jQuery 1.4和Dojo 2.0框架的编程示例

    使用jQuery与Struts2可以非常轻松的编程。如果你熟悉jQuery框架,那么你可以“让程序飞一会儿”吧。。。^_^ 阅读对象:熟悉Struts 1.x和Struts 2.x框架技术,熟悉jQuery框架技术,并且希望能够使用这些框架来应用...

    dojo中文文档-dojo手册

    在数据交互方面,Dojo的dojo.xhr系列函数(如dojo.xhrGet、xhrPost)实现了与服务器的异步通信,支持JSON、XML等多种数据格式。另外,dojo.data API则提供了一种统一的方式来存储和检索数据,无论数据源是本地还是...

    Dojo与ExtJs的比较

    ### Dojo与ExtJs的比较 #### Dojo框架解析 **Dojo** 是一款功能强大的面向对象的JavaScript框架,主要用于企业级应用和产品的开发。它以其丰富的组件库和全面的功能而闻名于世。Dojo主要由三个核心部分构成:Core...

    dojo文档 dojo文档 dojo文档

    dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档 dojo文档

    javascript dojo

    学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源学习dojo的绝好资源...

    dojo常用方法总结

    `dojoready` 是Dojo中的一个非常重要的函数,它的作用类似于jQuery中的`$(document).ready()`,用于确保文档加载完成后再执行某些操作。这样可以避免由于页面尚未加载完毕而导致的DOM元素未找到等问题。 ```...

    dojo js dojo js

    dojo js dojo js dojo js dojo js dojo js dojo js dojo js

    Dojo 与 Extjs 的比较

    JavaScript 框架Dojo和ExtJS都是广泛用于构建复杂Web应用程序的JavaScript库。它们各自具有独特的特性和优势,适用于不同的开发场景。 首先,我们来看看Dojo。Dojo是一个全面的JavaScript框架,由Core、Dijit和...

    精通Dojo by Dojo之父

    在众多的Ajax框架中,Dojo与Prototype和Ext JS一样,备受开发者青睐。Dojo是一款非常优秀的框架,但是它和Ext JS一样,缺乏完善而系统的参考资料。鉴于此,图灵公司引进了Dojo之父亲自撰写的《Mastering Dojo》一书...

    DOJO 学习笔记 dojo

    Dojo 是一个功能丰富的 JavaScript 库,它提供了一系列模块化、面向对象的工具,用于构建高性能的 Web 应用程序。在 Dojo 中,模块和包的概念是核心组成部分,它们帮助开发者组织和管理代码,使其更易于维护和重用。...

    bloody-jquery-plugins, 我从Dojo移植到jQuery的一系列代码.zip

    bloody-jquery-plugins, 我从Dojo移植到jQuery的一系列代码 插件默认情况下,Dojo中有一个有用功能的小 Collection,尽管在plain-ole-JavaScript上下文中有用。 hitch.jsjQuery中的高级作用域操作。 对于 jQuery 1.3...

    jquery prototype dojo 之 Ajax example and 学习总结

    本文将结合标题“jquery prototype dojo 之 Ajax example 和学习总结”以及描述,深入探讨jQuery、Prototype和Dojo这三种JavaScript库中的Ajax应用,以及相关的学习要点。 首先,jQuery是目前最流行的JavaScript库...

    dojo相关详细资料

    - `dojo/ready`: 确保DOM加载完成后再执行代码,类似于jQuery的$(document).ready()。 2. Dojo Widgets(组件): Dojo 的强大之处在于其丰富的Widget系统。`dojo_widget.doc` 可能详细介绍了这些组件,如按钮、...

Global site tag (gtag.js) - Google Analytics