Dojo 是一个 JavaScript 实现的开源 DHTML(动态html) 工具包。
Dojo能做什么??
1、让开发者更容易地为 Web 页面添加动态能力,也可以在其它支持 JavaScript 的环境中使用 Dojo;
2、利用 Dojo 提供的组件,开发者可以提升 Web 应用程序的可用性和交互能力;
3、Dojo 很大程度上屏蔽了浏览器之间的差异性,因此,开发者可以不用担心 Web 页面是否在某些浏览器中可用;
4、通过 Dojo 提供的工具,您还可以为代码编写命令行式的单元测试代码。
5、Dojo 的打包工具可以帮助您优化 JavaScript 代码,并且只生成部署应用程序所需的最小 Dojo 包集合。
6、……等等
Dojo架构(只包含部分包,网上找的)
第一层是 Dojo 的 Widget 系统,Widget 指的是用户界面中的一个元素,比如按钮、进度条和树等。通过Widget ,可以对按钮,菜单等进行操作,包括样式,事件处理。只需在页面中加入简单标签。
第二层是应用程序支持库,dojo大部分代码都放在这一层,我们大部分时候是在调用这个层中的API。
第三层是环境相关包,这个包的功能是处理跨浏览器的问题。
第四层是语言库,这个语言库里包含一些语言工具 API,类似于 Java 的 util 包。
最下面一层是包系统,Dojo API 的结构与 Java 很类似,它把所有的 API 分成不同的包(package),当您要使用某个 API 时,只需导入这个 API 所在的包。
上图中只是Dojo 提供的上百个包的一部分,这些包分别放入三个一级命名空间:Dojo,Dijit 和 DojoX 。其中 Dojo 是核心功能包,Dijit 中存放的是 Dojo 所有的 Widget 组件,而 DojoX 则是一些扩展或试验功能,DojoX 中的试验功能在成熟之后有可能在后续版本中移入到 Dojo 或 Dijit 命名空间中。
Jquery和Dojo宏观对比:
首先声明,并不绝对,一家之言。
1、框架规模
Dojo属于重量级开发框架,由框架核心(dojo)、基本控件库(dijit)、扩展包(dojox)组成的,三部分都是由dojo官方提供;
jQuery属于轻量级框架,本身仅包含框架核心,另外有一个与jQuery名下的独立开源项目jQuery UI,它提供了最常用的8个控件。
也不是绝对,如果你像用jquery那样用dojo,dojo它就是轻量级js库了。
如果你用jqueryui+jquery,那jquery就是重量级js库了。
2、编程方式
Dojo使用面向对象编程方式,为大型应用开发提供了保证;
jQuery使用函数式编程方式,开发小型应用时更加灵活快捷。
Dojo在Javascript的基础进行了面向对象能力的加强和规范化,提供了原生Javascript不具备的面向对象编程能力,比如父类方法重载(注意,不是重写)、多继承、构造函数调用链等等,并提供一系列面向对象编程规范的函数和属性declare、inherit、declaredClass、extend等作为dojo自身的编程基础。在dojo中,所有的UI控件都被定义为类,许多Dojo的核心功能库也被定义为类,这都是出于更好的代码重用性的考虑。
Javascript从本质上来说属于函数式编程语言,jQuery没有改变Javascript的编程方式,使其学习成本大大降低。也并不是说jquery完全不能进行面向对象的编程,只是不见得如Dojo那么直观,用Jquery一样可以用继承,一样在写this。各家有各家的见地。
3、代码风格
除去jQuery标志性的“$”符号外,其实dojo与jQuery在一些常用API上的命名和参数列表基本相似。
4、学习成本
从上文分析,我们摘掉Javascript从本质上来说属于函数式编程语言,jQuery没有改变Javascript的编程方式,使其学习成本大大降低,有Javascript编程基础很容易入门。但如果想做出有更高用户体验的界面,光靠技术是不行的。因为Dojo和Jquery两者代码风格相似,所以有Jquery基础,学习Dojo并不是非常困难。反之有Dojo基础,再来学习Jquery也不难。
5、适用范围
Dojo在面向对象支持,代码架构,多极模块加载机制,控件完整性等方面有着较为突出的特点,适用于企业级或是复杂的大型Web应用开发;
jQuery架构和机制相对简单,易于开发,应用广泛,适用于相对简单的Web 2.0开发。
Dojo和jQuery分别为复杂应用开发和简单应用开发设计,但不绝对,要看开发者怎么用。如果是UI 交互过多的应用,就选 dojo,但如果选择Jquery+Jquery UI也不失为一种好办法。
在实际项目中,需要根据具体需求来衡量,进行工具的选择。
呵呵,貌似所有的对比,最好都是具体问题具体分析,本文也是。我可不想误导大家。