Dojo框架:误解与现实
随着Ajax技术的流行,越来越多的Web应用使用Ajax技术来提高用户体验。使用Ajax技术的一个重要优势是不需要额外的浏览器插件支持,只需要使用浏览器原生的 API,并利用JavaScript来操作即可。使用原生API时会遇到的两个比较大的问题是浏览器兼容性和底层A代PI接口带来的编程复杂性。同样的功能在不同的浏览器上的实现方式是存在差异的。如果一个应用希望支持不同的浏览器,则开发人员需要添加很多的浏览器检测或嗅探的代码。比如同样的事件绑定功能,在IE上使用attachEvent,而在其它浏览器上则使用addEventListener。除了兼容性问题之外,浏览器提供的原生API的接口一般都比较适合用来执行细粒度的操作。当需要完成一些相对复杂的操作的时候,使用原生API接口会使得代码比较繁琐。以一个DOM查询为例:在当前文档树中查找给定ID的节点的所有给定标签的直接子节点。对于这样一个查询,使用原生DOM API的话,则会需要使用getElementById来查找节点,通过childNodes来获取子节点列表以及比较节点的标签名称等。所要求的码量会比较大。
JavaScript框架的出现,正是为了解决这两个比较大的问题,而不同的JavaScript框架也提供了各自额外的附加价值。目前可以使用的JavaScript框架非常之多,比较流行的也有十多种。这些流行的JavaScript框架包括jQuery、Dojo、YUI、MooTools、Prototype、Ext JS、Google Closure等。这些不同的框架有着各自不同的优势和不足,也有着对应的不同的适用情景和范围。由于工作的关系,笔者对Dojo框架的使用最多,对于其它框架也有一定的了解。本文的目的是希望澄清一些对于Dojo框架的误解,从而帮助开发人员选择合适的框架。
在开始之前,首先简要介绍一下Dojo框架的基本结构。Dojo框架由四个部分组成:Dojo基本库、核心库、Dijit和扩展库。基本库包含最基本的功能,核心库是基本库的扩展,Dijit是用户界面库,而扩展库则是各式各样的扩展组件。
满足Ajax应用开发基本的需求
Dojo和其它框架一样,都试图满足Ajax应用开发中的最基本的需求。这些基本的需求包括前面提到的浏览器兼容性和原生API的接口粒度问题,以及一些典型的应用场景。具体来说,应该包括下面一些功能集:JavaScript语言增强、XMLHttpRequest封装、DOM查询与操作和事件处理等。而浏览器兼容性体现在这些功能集在不同浏览器上的效果是一样的。
从Dojo框架来说,对这些功能集的支持是比较丰富的。在JavaScript语言增强方面,对数字、字符串、日期类型、数组和 JavaScript方法等有很多的增强功能。在I/O传输方面,除了常用的XMLHttpRequest 之外,还支持iframe和