随着AJAX的流行,在客户机浏览器中运行JavaScript来调用后台的远程服务,使用界面的局部刷新,使达到体验比较友好的界面变成一个趋势。

直接使用Javascript来完成所需要的业务功能不失为一个好的主意,但是如果想要客户端Javascript代码有清晰的体系结构,易于维护和扩展,提高开发效率,使用一些Javascript库会更容易。

Google Web Toolkit(GTW)是通过写Java源代码来自动生成所需要的Javascript客户端代码,功能强大,模式新颖。抛开这类完全封装和不透明的框架,最流行的Javascript框架当属Dojo,JQuery和Prototype JS。下面我们就比较一下这3个框架。

Dojo

http://www.dojotoolkit.org/

BSD license/Academic Free License version 2.1, 可以随意更改发布,只需要在源代码或者发布包里包含原有BSD协议。

Dojo是目前最强大的Javascript库。 它包含三个部分dojo, digit和dojox。Dojo是这个类库的基本实现,包括对象查询遍历,事件模型,类继承, ajax等等。Digit是dojo的UI库,包含很多种常见的Html UI界面组件。Dojox是一个扩展库,包含很多实用组件和UI界面组件。这个扩展库里面包含了一个非常常用的DataGrid组件。Dojo封装了ajax的实现,在XMLHttpRequest不可得的情况下,可以使用iframe实现相同的功能, 即支持平稳退化(graceful degradation)特性。Dojo模仿Java API的程序结构。

但是,Dojo文件体积比较大,客户端下载速度比较慢。Dojo语法不够简洁明了。源代码庞大复杂,不易于定位bug或者扩展。

JQuery

http://jquery.com/

MIT/GPL, MIT允许随意修改发布,只要包含原license。

JQuery也包含两个部分JQuery JS和JQuery UI. JQuery JS是这个库代码的基本实现,包括基本的HTML元素的操作, ajax等等。JQuery UI包含常用的简单的界面元素的实现。此库代码风格简洁高效,最流行的就是它的$函数。 JQuery代码体积小,下载速度快,代码简洁易读,容易扩展。

但是, JQuery所支持的UI组件略微简单,不够强大。而且没有Grid的组件实现。

Prototype JS

http://prototypejs.org/

MIT License,只需要把license文件一起发布就可以做任何事情,包括更改,扩展和重新发布。

Prototype JS是一个基础的Javascript库,不包含UI界面的实现。这个库采用类驱动的形式组织,即使用了javascript的prototype机制。同样对ajax有较好的支持。代码风格优雅,易读,容易扩展。Prototype同样有$方法,但是$方法没有像JQuery那样可以通过CSS进行查找HTML元素。

但是,缺少对UI组件的支持。

总结

在项目开发的过程中,当我们决定使用Javascript库作为前台界面的开发框架,我们应该慎重考虑选用哪个框架, 毕竟每个框架都有自己的优点和缺点。Dojo的功能最强大,最完善,支持各种UI组件,如果使用Dojo,客户端展示需要在界面加载时进行Dojo的客户化初始化,如果页面包含太多的Dojo UI组件,这样会降低页面的加载速度。考虑到Dojo本身的庞大性,导致下载Dojo代码需要一定的时间,也会减低页面加载效率。而且,Dojo源代码庞大复杂,难于阅读,如果需要对UI的组件进行客户化,或者出现难以预料的bug, 将会很难通过读或者修改源代码来解决。我在项目中很少轻易使用Dojo. JQuery是个不错的选择,代码简洁高效,支持基本的UI组件,如果需要其他客户化的组件可以在JQeury的基础上继续开发,JQeury本身也支持Plugin。JQeury的源代码简洁明了,也不算是复杂,出现问题可以通过读其源代码解决。我在项目中更多的就是使用JQuery。Prototype JS也是一个好的选择,如果不需要动态的创建UI组件, 只需要使用Javascript进行客户端的逻辑实现,prototype是个不错的选择,prototype源代码短小精悍,容易修改和扩展。项目中曾经使用prototype实现相关组合框和多个Grid的刷新。