而理解人类在互联网中的雄心,则是我们今天讨论RIA的前提。从计算机存在开始,人类就一直凭着我们的想象力、用对内在自由的憧憬和灵感不懈的创造,建造出了今天这个神奇的Internet。但毫无疑问,和我们在互联网这个虚拟空间中构建完整的自由的王国的理想相比,今天的一切(物理基础、技术等等)微不足道,只是一个起点。人类的终极目标是在互联网中构建一个容纳所有现实空间,并且能超越现实,承载起我们人类无尽想象力的二进制空间,在这个空间中,我们可以“乘云气,御飞龙,而游乎四海之外”。
一 接口的责任
我们幻想能在互联网上建立壮丽的理想王国,但拥有梦想是一种智力,而实行梦想需要的则是能力,我们需要的是更多的设备、更多的节点、更高效的网络、更优秀的技术。而接口程序,作为人类与网络空间交互的结合点,承担的责任则不仅仅是转换数字流,更需要完成人类对虚拟空间的体验。
接口程序,有如在T台走秀的模特展现出其所着的时装的特质与风情一样,需要拥有把一堆碎布拼接出来的物件变成人类美好感知的这种展现能力。就像我们通过艺术家的作品去理解其本人,通过残存的古迹去触摸古人的生活及思想一样,接口程序是我们感知互联网空间的最重要的途径,它需要做的不仅是实现某种功能,更需要按人类的需求去表现那个隐藏在背后的二进制空间的一切,健壮、灵敏、智能、或简单直接,或华丽堂皇。
二 RIA的概念
RIA 对应的完整的英文是 Rich Internet Application, 按字面翻译就是:丰富的互联网程序。据我所知RIA并没有严格的标准来定义其含义,要理解RIA是什么,我们不妨罗唆一点,从Internet的最主要接口 "WEB"的前世今生来说起。
在互联网开始诞生的时候,人们几乎在网络中“茹毛饮血”的年代,大家都在琢磨怎么把一些信息能通过网络的主动发布出去。就是出于这个共享信息的简单的目的,有个叫Tim Berners-Lee的英国小伙,他创建了一种快速小型超文本语言(HTML)实现信息与信息的连接,当时超文本技术已经有很多种,这个小伙的杰出之处指出在于设计出了用统一资源定位技术(URI)实现信息的精确定位,用新的应用层协议(HTTP)实现分布式的信息共享,这就是WEB的来源,这个当年的小伙几年前也因为他的贡献被英国女王授与了爵士爵位。
然而问题在于虽然历经修改、完善,这个最早之后几十个标签的HTML还是太简单了,无法承担起我们人类在互联网上自由展现想象力的重任。因此,在有了 HTML之后的十几年中,众多的Internet相关的技术纷纷出现,从DHTML、XML到Java Applet、SWT、AJAX、Flash等等,这些技术有些是平行发展,有些是一脉相承,但毫无例外的都是追求共同目标:更加强大高效、反应更加灵敏和更精彩的可视化特性的互联网程序。
技术发展的同时,我们人类对互联网应用与现实空间结合方面也在不断的探索和深化,在经历过2001年的网络经济泡沫的短暂低谷之后,大概从2004年开始 WEB2.0的概念被人们所挖掘和推广。WEB2.0虽然也涉及到了众多的具体技术,但更多是还是一些理念,其中有一条就是“Promises rich user experience”,这也是我们人类明确的把用户体验作为互联网程序的目标(虽然从一开始大家就是这么做的),“体验至上”不再是一个愿望,而成了一项强化的指标。就是说,RIA就是这么一种互联网应用程序:它能满足人们未来的体验,用和过去不同的方式实现功能、展现数据,我们也可以将其理解为下一代互联网的应用程序。
还需要提一下,在互联网程序兴起的过程中,传统的桌面程序逐渐的也迁移到互联网上,这就是上个世纪末开始的盛极一时的软件从C/S到B/S的转变。当时我们把传统的桌面软件叫做富客户端软件,把基于浏览器的程序叫做瘦客户端软件,那么需要澄清的是C/S的那种富客户端程序并不是RIA程序,千万不要把"Rich client"等同于"Rich experience",而RIA的核心则是"Rich experience",这个"Rich experience"不仅仅代表的是界面(UI)体验,这个我们后面还会进行讨论。
三 什么样的RIA?
如果只把RIA看成一种概念,世间一切微言妙语皆是佛法,凡是能实现"Rich User Experience"的Internet程序,都可以看成RIA的程序。但如果真若是这样定义的话,界定什么是RIA什么不是就比较困难了。RIA到底应该是个什么样的,最早提出RIA概念的Macromedia(如今被Adobe收购了)的表述如下:
A rich Internet application (RIA) is an entirely new kind of web experience that is engaging, interactive, lightweight, and flexible. RIAs offer the flexibility and ease of use of an intelligent desktop application, and add the broad reach of traditional web applications.
前一句是针对Web程序本身的,就不多分析了,让我们来看看后一句,直译过来就是“RIAs 提供了一种弹性,客户可以轻松的在大量传统的Web程序上,使用智能的桌面程序”。略有一点抽象, 我罗唆点用直白一点的方式来说一下。到目前为止,传统桌面程序和互联网程序都有比较明显的区别,各有各的地盘。桌面程序往往功能强大、具备良好的交互性,界面丰富、响应时间短;而Web程序的优势在于用户的零部署安装、浏览器连通着的无限的咨询信息;一方面,在经历了C/S转B/S的重新洗牌后,桌面程序和互联网程序二者的分工也逐渐明确;另一方面,桌面程序也在想方设法的去利用互联网,分享互联网带来的好处,比如每日连线升级的杀毒软件,定时从网站上下载新闻的RSS阅读器等等。那么很自然的,我们就希望能有新的开发方式,开发出来的软件能同时拥有桌面软件和WEB软件的优点。这就是RIA的目标:用某种技术开发出一个程序,不需要什么额外的工作,就能在桌面环境里做运行,又能部署到互联网上,这个程序还需要继承桌面软件和WEB软件的现有优点。
简单的说,需要通过RIA去抹掉现有的桌面程序和WEB程序的界限。
我们可以看看Adobe官方提供的两个简单的例子,感受一下基于Flash的RIA是什么样:
http://examples.adobe.com/flex2/inproduct/sdk/restaurant/finder.html
http://examples.adobe.com/flex2/inproduct/sdk/photoviewer/PhotoViewer.html
对于RIA程序应当拥有什么样的具体特性,我还没有发现为大家所一致认可的说法。对一些现有的具体技术实现的程序是不是RIA目前也存在很多争论。所以在这里我也就只列一下提的比较多的RIA的特点,不做过多的介绍,以免说的不对,误导大家。
- 良好的用户体验, 响应速度快和丰富的用户界面
- 基于互联网的开放标准进行数据传输
- 运行时快速高效
- 能整合多种媒体格式
- 丰富的组件,基于事件驱动,能进行快速开发
- 支持联机/离线的数据传输
- 良好的兼容性,能在多种平台下运行
这里指出需要注意的几条:
1. Macromedia提出并推出用于了实现RIA的开发平台,但RIA不是专指Adobe(Macromedia)的那套开发体系,如果真要那么叫的话,可以称之为 Flash RIA(国外一些人喜欢这么说)。
2. RIA目前在很多地方既指富互联网应用系统,又指富互联网应用系统的开发技术,我们要注意区别。
3. 一般的互联网上的富客户端程序(包括拥有联机升级功能的桌面程序)并不能直接被看成RIA程序,RIA程序应当满足很多Internet运行的特点,比如功能要足够强大、跨平台、统一部署等等。
4. 至少从目前看,RIA一般还不能用某个单一的技术来实现,基本都是一些技术的综合应用,并且其实现的这种"Rich experience"也是基本是相对与过去基于HTML实现的程序而言的;不易把RIA的思想无限扩大,要知道人类对感观的追求可是永无止境的。
我们可以期待在经过一段时间发展和总结之后,人们能对RIA程序的应该拥有的特性达成明确的共识,并能制定统一的标准,这样将来我们能把RIA落实为一个技术词汇,从而明确的界定RIA在人类于互联网中追逐梦想的征途中所处的阶段,评价它起的作用。
四 当前的RIA开发技术简介
正如前面所说,从有WEB的第一天起,我们就在追求用更美更绚丽的方式去展现内容,而RIA应当有些什么硬指标目前也没有定论,所以如今号称能实现RIA的技术的非常的多。主流的RIA开发技术大部分的原理都很相似,基本都是基于XML布局来做UI,通过丰富的组件,同时把更多的UI展现的工作交给客户端,尽可能的减少数据通讯的量来获取更短的响应时间。下面谈谈我对一些有一定影响力的RIA开发技术的看法:
1) Adobe Flash/Flex
Flash就不需要介绍了,互联网中的老资格了,UI展现能力没的说,还一直在与时俱进。Flex是Adobe推出的创建并发布RIA的开发平台,最终是要把程序发布成Flash,从而一举解决了浏览器之间的移植问题。Flex使用MXML进行布局,用它自己的类似Javascript的Actionscript语言控制逻辑,目前是Flex的版本是 3.0。根据我直接的使用,Flex就像当年的VB,非常的不错;此外,Adobe将要推出Apollo的东东,能实现更高层次的RIA开发及运行支持,值得期待。我的感觉Apollo正在做一些当年Java承诺过却没有做到的事情,到底Apollo能不能做到,还需要时间去考验。
2) Laszlo
Laszlo 也是一个有多年历史的开源的RIA开发环境了,它就显得更实在一点。Laszlo平台主要目的是在目前主流的一些技术的基础上来实现RIA,它用的是名为LZX的描述语言,LZX整合了XML和Javascript,这样很多程序员都可以用最小的代价去进行RIA开放。Laszlo平台运行在J2EE 应用服务器上,也是把程序发布成SWF格式的文件,从这点上来说,Laszlo的本质和Flex是一样的。Laszlo还打算将LZX编译成Java或.NET本地代码,从而提高效率,跨大覆盖面。
3) Microsoft WPF/Expression
Microsoft的Windows Presentation Foundation(WPF)是Vista的一部分,是一个图形和展示引擎,主要由新加到.NET框架中的一组类集合而成。Avalon使用的布局语言是"XAML"(可扩展应用程序标记语言),用C#进行编程。微软去年年末推出了对应的开发工具MS Expression Studio, 一度引起轰动。其实WPF和这与Flex及Laszlo都原理都是如出一辙,不过WPF的程序毫无疑问目前只能在MS的平台上(严格说是只能在Vista上)运行。
4) Java SWT/JSF
Java是互联网里的霸主,RIA的这套理念的很多东西Java早就告诉过世人了,可遗憾的是在展现方面Java一直修不成正果,从最早的Servlet到JSP Tag, 几乎一度让人从失望到绝望。Java基础类(JFC/Swing)中的用户界面组件就不用说了,这两年开始流行的SWT工具箱,一样基于XML布局的JDNC,拉上AJAX救火的JSF,也都远没有Flex、WPF这些新锐来的朝气蓬勃; Java固有的复杂性高、效率偏低、开发投入高等问题,都阻碍了Java在RIA中的发展。注意我不是说Java不行,Flex、Laszlo都是要运行在J2EE上的,只不过在展现层Java是日落西山,如果没有重大的技术革新,沦为配角是早晚的事。
5) AJAX:
虽然有部分人认为AJAX这种新瓶装老酒的东西不能划入RIA的开发技术中,我还是要在这里把它列出来,因为有众多的AJAX的支持者都认为AJAX能很好的实现RIA程序,比如《Pragmatic Ajax - A Web 2.0 Primer》的第一章的标题就是《Building Rich Internet Application With Ajax》。
我曾经看到过一篇流传很广的文章,是国外一个没有用AJAX实际做过开发的人写给他们公司的一份调研报告,说的是AJAX是实现RIA的最好方法,原因是AJAX是在现有这些技术基础上做RIA最简便的方法,成本最低。他说的也有一点道理,代表了很多人想法。但事实是不是这样,AJAX真的简单,开发成本低么?我想每个用过AJAX做开发的人都有自己的答案。
对我来说,我相信对RIA来说AJAX不是最好的选择,抛开AJAX开放的复杂度和能实现的效果的局限性不说,在AJAX中Javascript引起的兼容性问题几乎是需要用穷举法去解决的,效果可想而知。举个例子:一块钢铁,原来是做成刀和矛去杀敌,后来加上火药成了枪弹,看上去威力大多了;可你这还是站在用钢铁杀人的思维上,倘若直接用超声波去对付敌人,就直接能杀人于无形,一块铁片都不需要用。HTML就好比这种钢铁,日常打把刀切菜是少不了它,有些时候需要大场面的时候,就需要用用超声波、用气流,甚至是原子弹解决问题,建造超声波武器、原子弹是很难,不过用他们,同样就是按一下按钮的事。
6) XUL
XUL(发音发成"zool")扩展用户界面语言。XUL是一个老家伙了,UI基于XML布局的思想就是从它来的,它来自于Mozilla的开放源码项目。XUL是对html的扩展,完全兼容于html,当然也就支持Javascript。XUL实现了完整、强大的图形用户界面设计功能,实际上mazilla整个就是基于XUL的。XUL到底怎么样,有多大影响力,我没有研究过,不敢妄言,好像国外还是比较认可它的。
这里我斗胆点评了一些RIA的开发技术,RIA的开发技术还有很多,大家自己要有看好的可以来补充,此外本人对RIA的认识有限,说的不妥之处还请朋友们不吝赐教。
五 不需要预测的未来
RIA会有将来会成为互联网的主流么?这是一个只有一个答案的问题,那就是“会”。不需要去纠缠那些技术细节,你至少可以相信HTML及其派生出来那些技术不能让对体验效果的追求永无止境、又十分挑剔的我们满意,那么能带给我们耳目一新的感觉的RIA有什么理由不成为主流? Microsoft和Adobe已经磨刀霍霍,准备在RIA的时代里挑大梁了,我们可别光坐着看热闹。
RIA将要取代HTML? 我想我们还在用宋朝就发明了的纸,就能说明回答这个问题,如同我在前面举的例子,如果有一天现代战争不需要用钢铁去杀人了,我们或许还需要用它去切菜。
声明:本站中所有文章均为站长原创,转载请保留作者信息,并请注明出处。