【导读】本文主要通过对RIA邮件应用和AJAX邮件应用的用户体验对比,按照对比分析的方式将体验中的感性升华为理性。同时,此文也可以给所有从事WEB工作的设计人员和开发人员以借鉴参考,也能普及RIA常识和AJAX常识。 |
体验实例:
RIA应用之Goowy 邮件 http://www1.goowy.com
AJAX应用之Google邮件 http://mail.google.com
AJAX与RIA共性:
都是WEB2.0的应用
都具有人性化的设计理念
AJAX与RIA不同:
AJAX比较简单素雅,人性化,访问速度快。缺点:代码混乱,编写复杂,不符合标准,对搜索引擎不友好。程序效率低。
RIA可扩展性更大,人性化更多,视觉和互动上更好,但缺点是访问速度慢,下载文件大,还有RIA应用程序特别耗CPU,程序效率比较低,很多问题还需要解决。
富互联网应用系统(RIA)
在过去的大约两年中,人们的兴趣一直是想构建一个"富客户端":这是一个用户接口,它比用HTML能实现的接口更加健壮、反应更加灵敏和更具有令人感兴趣的可视化特性。RIA(Rich Internet Application,富互联网应用系统)技术允许我们在因特网上以一种象使用Web一样简单的方式来部署富客户端程序。无论将来RIA是否能够如人们所猜测的那样完全代替HTML应用系统,对于那些采用胖客户端技术运行复杂应用系统的机构来说,RIA确实提供了一种廉价的选择。
为什么用RIA?
基于HTML的应用程序之所以变得流行是由于应用系统的部署成本低、结构简单,且HTML易于学习和使用。很多用户和开发人员都乐于放弃由桌面计算机带来的用户界面改进,来实现对新数据和应用系统的快速访问。与丧失一些重要的UI功能相比,基于Web的方式所带来的好处要更大得多。
然而,某些应用系统并不完全适合采用HTML技术。复杂的应用系统可能要求多次提取网页来完成一项事务处理,在某些领域中,如医药和财务领域,这往往导致交互速度低得无法接受。让我考虑一个项目管理系统:我们可以将其实现为一个HTML应用系统,但是如果用户可以看到并且操作图表、进度表和各种层次结构,那么显然会工作得更好。
此外,虽然HTML开始走向简单,但是即使简单的交互活动也仍然需要用很多的脚本来完成。即使一个输入窗体经过仔细的布置和全面的脚本设计,它从浏览器所能发送的也仅仅是简单的"名字/值"对。如果一个HTML窗体能够以XML文档形式发送和接收更复杂的数据结构,那就好多了。
RIA利用相对健壮的客户端描述引擎,这个引擎能够提供内容密集、响应速度快和图形丰富的用户界面。除了提供一个具有各种控件(滑标、日期选择器、窗口、选项卡、微调控制器和标尺等)的界面之外,RIA一般还允许使用SVG(Scalable Vector Graphics,可伸缩向量图)或其他技术来随时构建图形。一些RIA技术甚至能够提供全活动的动画来对数据变化作出响应。
RIA的另一个好处在于,数据能够被缓存在客户端,从而可以实现一个比基于HTML的响应速度更快且数据往返于服务器的次数更少的用户界面。对于无线设备和需要偶尔连接的设备来说,将来的趋势肯定是向富客户端的方向发展,并且会逐渐远离基于文本的Web客户端。那些运行在膝上设备上的应用系统,可以被设计成以离线方式工作,或者至少当连接丢失的时候能基本上以离线的方式工作。
图1给出了一个典型的RIA体系结构。XML通常被用作数据传输的格式,有时也被用来描述窗体的布局。在很多的实例中,客户端可以保持与数据源的连接,这样服务器能够实时地对客户端数据进行更新。对一个Oracle数据的访问可以通过Web服务调用来完成。
图1
用于富客户端RIA的技术
Java:一些相当复杂的客户端应用程序(Oracle的JDeveloper,Eclipse)都是用Java编写的,这说明可以用Java来建立几乎任何一个能够想象得到的富客户端应用程序。到目前为止,Java已经出现几年了,并且完全支持创建基于窗体的用户界面。除了Java基础类(JFC/Swing)中的用户界面组件之外,开发人员还可以使用来自于Eclipse Project的SWT工具箱和许多第三方工具箱进行开发。对于图形来说,可以采用Java 2D API--一个非常完整且非常复杂的图形API。Java还具有对XML和Web服务无人匹敌的支持能力。你可以通过一个Web浏览器使用Java插件软件,或使用Java运行时环境中较新的Java Web Start技术来部署应用程序。使用Java建立富客户端程序的主要缺陷是它的复杂性(即使对简单的窗体和图形也要求编写非常烦琐的代码)。它的优点在于Java对Web标准的全面支持,及该语言和类库的深刻内涵。
XUL:XUL(念作"zool")是一个基于XML的用户界面语言,它来自于Mozilla的开放源码项目。它可用于建立窗体应用程序,这些应用程序不但可以在Mozilla浏览器上运行,而且也可以运行在其他描述引擎上,如Zulu(一个Flash MX组件)和Thinleys(一个Java实现)。XUL描述引擎都非常小(100K以下),它可以使用XML数据也可以生成XML数据。同Java的情况一样,XUL也有一个非常大的用户团体,这个团体有大量的开放源工具,如Theodore ThinletEditor(见“下一步”)——一个使你能够以图形化方式布局用户界面,且可以生成相应XUL的Java应用程序。XUL的一个主要缺点在于它目前还没有获得一个主要商业实体的支持。XUL最大的优点在于它与Gecko引擎的集成(打开了通向大量Web标准的大门),以及与大多数其他XML用户界面描述语言相比它是一种非常具有表达力和简洁的语言。
Macromedia Flash和Flex:Flash是一个已经成熟的商业产品,它可以在Web网页中引入交互式的图形界面。最近经过升级后,新版本包含了建立窗体风格的应用程序的功能。尽管Flash作为一个在Web上最广泛部署的前端技术还有争议(取决于所选用的Flash Player版本),但据称已经有98%以上的桌面系统都支持Falsh。由于用来创建动画式图形的Flash工具其功能十分强大和是可视化的(与之相反其它技术要求进行低级的图形编码),所以图形设计人员使用起来十分得心应手。Flah采用的脚本语言是ActionScript--ECMAScript 1.5的一个变种,该脚本语言又被称为JavaScript。Flex产品对Flash增加了一个XML描述语言,使得可以编译用户界面,并且能够用Flash Player来随时进行描述。Flex使得传统的开发机构能更好地了解和使用Flash。Flex和Flash的最大缺点在于对XML和Web服务等标准的支持很有限,而且作为应用开发工具的环境还不大成熟。Flex和Flash的优点在于它可以很容易的用来创建复杂的动画式显示,以及可以使用第三方附件。
Oracle Forms:Oracle Forms是用来构建以数据库为中心的互联网应用系统的一个成熟的商品化产品。通过Oracle Forms,你可以使用一个输出窗体模块文件的可视化设计器创建窗体。为了便于在该设计工具外部进一步进行处理,模块文件要么采用私有的FMT格式,要么采用XML格式。这些模块文件驱动一个描述窗体的Java运行时环境。除了所有窗体的标准窗口小部件之外,还可以通过集成附加的可插入的Java组件和一些定制的JavaBean来实现更多的功能性。Oracle Forms采用的脚本语言为PL/SQL,Oracle数据库也采用同样的脚本语言。Oracle Forms的一个非常有趣的特点就是,用来建立、编辑和编译窗体模块文件的Java API--开发人员可以通过创建脚本来生成众多的窗体应用程序,或者进行全局性的改动。Oracle Forms的主要缺点是,进行Web部署需要获得Oracle应用服务器的使用许可。它的优点是,它可以与Oracle数据库和Oracle平台的其他部分(如Single Sign-On(单一登录)和Enterprise Manager(企业管理器))紧密集成,对国际化的广泛支持,以及创建以数据为中心应用程序的极高效率。
开始选择和使用RIA技术
这里只讨论了可用于创建RIA的技术中的一些有代表性的例子,还有很多其他的技术。当选择一项RIA技术的时候,你需要权衡以下几个因素:
- 开放源产品与商品化产品进行对比;
- 成熟的功能与最新的特性进行对比;
- 轻量级的功能特性范围与UI的丰富性进行对比;
- 以媒体为中心的应用程序与以数据为中心的应用程序进行对比;
AJAX简介
作为J2EE开发人员,我们似乎经常关注“后端机制(backend mechanics)”。我们通常会忘记,J2EE的主要成功之处在Web应用程序方面;许多原因使得人们喜欢利用Web开发应用程序,但主要还是因为其易于部署的特点允许站点以尽可能低的成本拥有上百万的用户。遗憾的是,在过去几年中,我们在后端投入了太多的时间,而在使我们的Web用户界面对用户自然和响应灵敏方面却投入不足。
Ajax,使用它可以构建更为动态和响应更灵敏的Web应用程序。该方法的关键在于对浏览器端的JavaScript、DHTML和与服务器异步通信的组合。
利用一个Ajax框架(指DWR)构造一个应用程序,它直接从浏览器与后端服务进行通信。如果使用得当,这种强大的力量可以使应用程序更加自然和响应灵敏,从而提升用户的浏览体验。
术语Ajax用来描述一组技术,它使浏览器可以为用户提供更为自然的浏览体验。在Ajax之前,Web站点强制用户进入提交/等待/重新显示范例,用户的动作总是与服务器的“思考时间”同步。Ajax提供与服务器异步通信的能力,从而使用户从请求/响应的循环中解脱出来。借助于Ajax,可以在用户单击按钮时,使用JavaScript和DHTML立即更新UI,并向服务器发出异步请求,以执行更新或查询数据库。当请求返回时,就可以使用JavaScript和CSS来相应地更新UI,而不是刷新整个页面。最重要的是,用户甚至不知道浏览器正在与服务器通信:Web站点看起来是即时响应的。
虽然Ajax所需的基础架构已经出现了一段时间,但直到最近异步请求的真正威力才得到利用。能够拥有一个响应极其灵敏的Web站点确实激动人心,因为它最终允许开发人员和设计人员使用标准的HTML/CSS/JavaScript堆栈创建“桌面风格的(desktop-like)”可用性。
通常,在J2EE中,开发人员过于关注服务和持久性层的开发,以至于用户界面的可用性已经落后。在一个典型的J2EE开发周期中,常常会听到这样的话,“我们没有可投入UI的时间”或“不能用HTML实现”。但是,以下Web站点证明,这些理由再也站不住脚了:
BackPack
Google Suggest
Google Maps
PalmSphere
所有这些Web站点都告诉我们,Web应用程序不必完全依赖于从服务器重新载入页面来向用户呈现更改。一切似乎就在瞬间发生。简而言之,在涉及到用户界面的响应灵敏度时,基准设得更高了。
定义Ajax
Adaptive Path公司的Jesse James Garrett这样定义Ajax:
Ajax不是一种技术。实际上,它由几种蓬勃发展的技术以新的强大方式组合而成。Ajax包含:
基于XHTML和CSS标准的表示;
使用Document Object Model进行动态显示和交互;
使用XMLHttpRequest与服务器进行异步通信;
使用JavaScript绑定一切。
这非常好,但为什么要以Ajax命名呢?其实术语Ajax是由Jesse James Garrett创造的,他说它是“Asynchronous JavaScript + XML的简写”。
Ajax的工作原理
Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。
在创建Web站点时,在客户端执行屏幕更新为用户提供了很大的灵活性。下面是使用Ajax可以完成的功能:
动态更新购物车的物品总数,无需用户单击Update并等待服务器重新发送整个页面。
提升站点的性能,这是通过减少从服务器下载的数据量而实现的。例如,在Amazon的购物车页面,当更新篮子中的一项物品的数量时,会重新载入整个页面,这必须下载32K的数据。如果使用Ajax计算新的总量,服务器只会返回新的总量值,因此所需的带宽仅为原来的百分之一。
消除了每次用户输入时的页面刷新。例如,在Ajax中,如果用户在分页列表上单击Next,则服务器数据只刷新列表而不是整个页面。
直接编辑表格数据,而不是要求用户导航到新的页面来编辑数据。对于Ajax,当用户单击Edit时,可以将静态表格刷新为内容可编辑的表格。用户单击Done之后,就可以发出一个Ajax请求来更新服务器,并刷新表格,使其包含静态、只读的数据。
一切皆有可能!但愿它能够激发您开始开发自己的基于Ajax的站点。然而,在开始之前,让我们介绍一个现有的Web站点,它遵循传统的提交/等待/重新显示的范例,我们还将讨论Ajax如何提升用户体验。
RIA与AJAX
位于尤他州Midvale的Burton Group公司的高级分析师Richard Monson-Haefel认为,当提到被大肆宣传的富互联网应用(Rich Internet Application ,RIA)技术时,更少的才是更好的。这种技术能够大大促进用户的Web体验,因为不必再从服务器刷新页面,Ajax的风格是单页面接口。但他在最近关于 Ajax的电视短片中说过度使用会导致导航困难。
他说,Ajax比起其它RIA技术的主要优点是无缝与HTML集成,因此它可以大量使用而不需要改变现有Web内容。“把它想象成Web站点的调料。这样做的风险非常小。Ajax还是后台无关且不需要任何插件。与其它RIA技术,例如 Macromedia的Flash等联合使用,Ajax会是一个强大的工具。”
但是,该技术还没有成熟,而且工具和框架还没有得到支持。Monson-Haefel说:“如果你不喜欢用工具集和类库,Ajax就不适合你。”
Burton Group定义“富”互联网应用是能够在标准HTML框架和链接之上提供功能的。Google Maps就是这样一个优秀的Ajax例子。
与Ajax最近被才提出不同,JavaScript已经存在很久了。它基于JavaScript/ECMAScript,、级联样式表、文档对象模型以及XML HTTP请求。最初,很难跨越不同浏览器来设计Ajax风格的应用程序。但现在,主流浏览器已经演变到支持微软技术的实现了,并成为了最普通的特征。
今天,占主导地位的RIA技术是Macromedia的Flash/Flex。其它RIA技术包括为Microsoft Windows Presentation Foundation开发的用户接口标记语言,称为XAML(Extensible Application Markup Language,可扩展应用程序标记语言)。还有Mozilla的基于XML的用户接口语言XUL,droplets和Java applets以及微软将要推出的Windows Presentation Foundation/Everywhere (WPF/E)。
Monson-Haefe说:“Flash是很好的技术,适合于丰富动画与图形,但Flash好象是一个小池塘中的大鱼。现实市场现在还没有那么大,因此随着市场变大它是否能占领市场还是一个疑问。而微软将推出的WPF/E会是一个有力的竞争者。”
微软还计划推出一个Ajax框架扩展,称为Atlas。Monson-Haefel认为它非常有前途。他说,Ajax的其它集成开发环境还没成为主流。这包括Morfik Technology公司的Javascript Synthsis Technology (JST)、JetBrains公司的IntelliJ IDEA 5.0、Tibco Software公司的Tibco General Interface (GI)、JackBe公司的Visual GUI Builder、Backbase B.V.公司的Backbase以及开源的Ruby on Rails框架。
他说:“它已经内建了Ajax功能,使你能够用Ruby编程语言编写Ajax应用程序。”
Monson-Haefel说:“用于编写Ajax应用的Tibco工具非常好。JackBe也是相当好的RIA技术而Backbase或许是现在更好的一个。IDE的优点就是所见即所得的开发方式,但你购买了他们的GUI,这样你也受到观感上的束缚。”
除了IDE和框架扩展,Monson-Haefel还提到可用的Ajax UI工具和远程工具还有很多,包括私有的和开源的产品。他说,只有一部分。根据Burton Group公司最近的一项调查,在488位Ajax开发人员中,最流行的工具集、类库和框架扩展是有MIT风格证书的JavaScript框架—— Prototype,JavaScript 类库——Script.aclo.us,有Apache 2.0证书的Direct Web Remoting,有Academic Free License v 2.1的Dojo UI工具集以及Ruby on Rails。
至于数据,对Ajax的关注主要集中在B2C的Web站点,但Monson-Haefel指出Ajax实际上与Web服务和SOA有紧密联系,它能影响企业门户。
“一些人相信Ajax将成为门户解决方案的主要复苏因素。门户被宣传了很久,但实际上它并非所谓的银弹。而Ajax表示层与门户的结合将促进所有用户的体验。”
Monson-Haefel警告说Ajax很容易被滥用。“假如开发人员不理解使用理论,他们就会胡乱应用它而且人们会刻意避开JavaScript。我的推理来自浏览器弹出窗口。这种技术源于一种可用特性,但由于被滥用它已经成为Web技术中的下等公民,人们也不再使用它了。”