为什么有框架?
使用现成的Ajax框架,从而使得Ajax开发变得相对简单了。通过使用框架,你不用再做Ajax开发平常的一些烦琐任务,这样就能把重点集中在业务逻辑上,而不是Ajax的细节上。
基于浏览器的应用框架一般分为两种:
·Aplicationframeworks:提供了浏览器功能,但其最著名的还是在于通过窗口生成组件建立桌面GUI。
·Infrastructuralframeworks:提供基本的框架功能和轻便式浏览器端操作,让开发者去创建具体应用,主要功能包括:
·基于XMLHttpRequest组件的浏览器交互功能
·XML解析和操作功能
·根据XMLHttpRequest的返回信息进行相应的DOM操作
·一些特殊情况下,和其他的浏览器端技术如Flash(或JavaApplets)等集合到一起应用
基于服务器端的应用框架通常以下面两种方式工作(尽管它们根据不同的语言进行了分类)
·HTML/JSGeneration(HTML/JS生成):通过服务器端生成HTML和JS代码在传递给浏览器端进行直接运行
·远程交互:JavaScript调用服务器端函数(例如调用Java函数)并返回给JavaScript的回调句柄,或者请求服务器端数据信息,例如Session信息,数据库查询等。
常见框架
常见的AJAX框架有:
·DWR-WebRemoting
·Buffalo-WebRemoting(basedonprototype)
·prototype-JSOOlibrary
·openrico-JSUIcomponent(basedonprototype)
·dojo-JSlibraryandUIcomponent
·qooxdoo-JSUIcomponent(C/SStyle)
·YUL-JSUIcomponent
下面对这些框架做一个概述:
DWR:使用自定义的简单文本协议,而Buffalo使用burlap协议。因此Buffalo解析大数据量可能会比较慢,然而可以适用于多种服务器端和客户端,并且burlap协议的完整性和支持的数据类型更加丰富。
Buffalo:基于prototype,如果你的AJAX应用也是基于prototype,那么可以减少重复加载prototype的带宽,并且获得相当一致的编程概念。
prototype:是一个非常优雅的JS库,定义了JS的面向对象扩展,DOM操作API,事件等等,之上还有rico/script.aculo.us实现一些JS组件功能和效果(不过目前还不是很完善),以prototype为核心,形成了一个外围的各种各样的JS扩展库,是相当有前途的JS底层框架,值得推荐,prototype以及rico/script.aculo.us的一个特出特点就是非常易学易用,门槛很低,常常是一两行JS代码就可以搞定一个相关的功能。同时它也是RoR集成的AJAXJS库。
qooxdoo:是一个功能很强的JS组件库,完全模仿Windows操作系统的GUI组件。特点是不通过常规的HTML来构造页面,完全使用JS以类似VB/Delphi风格的编程方式构造WebGUI界面,比较适合内网面向C/S风格的web应用,,而不适合面向Internet的界面多变风格的应用。qooxdoo的一个重大卖点在于qooxdoo将要提供一个FormDesigner的IDE,通过在IDE里面的可视化拖拽设计方式来自动生成C/S风格的web页面js代码。qooxdoo缺点是JS文件体积过大,超过200KB,初次下载会比较慢,而且并不适合Internet消费类网站。
dojo:是一个各个方面相当完善的JS库,包括了JS本身的语言扩展,以及各个方面的工具类库,和比较完善的UI组件库,也被广泛应用在很多项目中,他的UI组件的特点是通过给html标签增加tag的方式进行扩展,而不是通过写JS来生成,dojo的API模仿Java类库的组织方式。dojo的优点就是库相当完善,发展时间也比较长,缺点是文件体积也比较大,200多KB,初次下载相当慢,此外,dojo的类库使用显得不是那么易用,至少给我的感觉是相当笨拙,特别是和prototype相比,更加显得难用。
YUL:是Yahoo新近发布的AJAX组件库,也是一个包含了各个方面,从工具类库到通讯,到UI组件的综合性JS库。YUL的优势在于文档非常齐全,而且有Yahoo的支持,缺点是库目前还是不是很全,功能也不强大。
GWT:Google发布GoogleWebToolkit。GoogleWebToolkit是一个开放版本的AJAXFramework,通过它用户可以构建像GoogleMaps和Gmail之类的Web应用程序。这个GoogleWebToolkitbeta是免费的,它是一个基于java的工具,并能够和任何java开发工具协同工作。
GWT已经加入到Google的代码库当中,这个代码库包含了很多API和开发工具。Google产品经理BretTaylor表示,当用户把应用程序部署到产品当中时,GWT编译器只要简单的把用户的java应用程序转换成浏览器支持的JavaScript和HTML就行。
Atlas:微软的Ajax,微软致力于简化Ajax风格Web应用的开发,并提供丰富的、可交互的和个性化的用户体验。开发者可以对客户端脚本不甚了解;但他们可以很容易地开发和调试这种应用程序。
出于这一目的,微软启动了一个新的项目,研发代号“Atlas”。Atlas为开发这带来了如下特性:
·Atlas客户端脚本框架
·Atlas的ASP.NET服务器控件
·ASP.NETWebServices集成
·Atlas的ASP.NET构建块
·客户端构建块服务
jsLINB--国人的一个完整Ajax/web2.0技术框架,LINB(LazyINternetandBrowser)是一个面向程序编写者的软件架构。它的目的是让程序编写者在对软件的全局了如指掌的基础上,实现更目标驱动的、任务清晰的、高效的软件应用。LINB是平台无关的架构,兼容C/S、B/S、RIA和Web2.0等等。
Buffalo特性:
·基于prototype,如果你的AJAX应用也是基于prototype,那么可以减少重复加载prototype的带宽,并且获得相当一致的编程概念
·Bind:提供了对结果数据的处理,直接将数据绑定到页面对象并展示,这是一个动人的特性。(DWR在Util.js中也提供了一些方法来简化数据的展示,但不如Buffalo做的更多。)在2.0中,Bind能力更加强大,能够将值直接绑定到表单元素、表格、DIV/Span、甚至整个表单上。关键是这种绑定是无侵入并且与buffalo整体结构完全整合,对外表现只有一个简单的{{buffalo.bindReply}}或者{{Buffalo.Bind.bind}}即可。有一些描述。
·序列化:Buffalo支持任意对象,任意深度,任意数据结构的java到javascript以及javascript到java的双向序列化。并且支持引用。这里有完整的协议说明。由于文档和演示不充分,很多人以为buffalo不支持任意对象了
·生命周期对象访问:引入了线程安全的BuffaloContext对象,只需要通过BuffaloContext.getContext()即可获得一个线程安全的引用,并且对Request的各种属性进行操作。更方便的是:
MapBuffaloContext.getContext().getSession()
MapBuffaloContext.getContext().getApplication()
MapBuffaloContext.getContext().getCookie()
即可获得session/application/cookie的Map,操作这些Map即可获得对这些生命周期的各种变量进行查询和更新。这个特性参考了webwork中ActionContext的设计