RIA技术
Rich Internet Application(富互联网应用程序,简称RIA),一种全新的Web应用程序架构,它结合了桌面软件良好的用户体验和web应用程序易部署的优点,很快获得了企业的青睐。 近年来,各大开发平台供应商相继推出新的技术来支持RIA的开发,从Ajax到SilverLight,从Apollo和AIR到Flex和Flash,从JavaFX到Laszlo,各种技术粉墨登台,以期成为大家关注的焦点。
然而,作为应用系统开发厂商,开发团队和开发者,在RIA大潮中,选择什么样的技术,让自己更好地构建RIA系统,成为一个我们需要仔细考虑的问题。
AJAX
Ajax实际上是用新的技巧把一些古老技术结合在一起使用,从而让Web Application用户界面的交互性得到极大的提升。
在Ajax中,XMLHttpRequest是核心,是Ajax强大功能的来源,Ajax和传统的Web界面技术区别也就在此。通过XMLHttpRequest,就把浏览器中的HTML(DHTML)和服务器端的数据分离开。利用JavaScript来操纵客户端访问服务器获取数据,并修改HTML结构,以显示数据。使用Ajax的经典例子就是Gmail和Google Maps了。
Flash/Flex/Laszlo
Flex是为满足企业级应用而推出的应用程序框架。Flex提供基于标准的、声明性的编程方法和流程,用于开发和部署丰富客户端应用程序的表示层。Flex开发者使用直观的、基于XML的MXML来定义丰富的用户界面,利用ActionScript(一种面向对象的脚本语言)来编写程序逻辑。
该语言由 Flex服务器翻译成SWF格式的客户端应用程序,在Flash Player中运行。目前Flex已经发布了Flex 3.0 beta。
Laszlo是一个开源的RIA开发环境。使用Laszlo平台时,开发者只需编写名为LZX的描述语言(其中整合了XML和JavaScript),运行在J2EE 应用服务器上的Laszlo平台会将其编译成swf格式的文件并传输给客户端展示。在未来的计划中,Laszlo还可以将LZX编译成Java或 .NET本地代码,从而大大提高运行效率。在最新发布的Laszlo 4.0中,开发人员可以选择Laszlo最终显示为Flash还是DHTML。
Flex和Laszlo从运行位置来看,他们都属于服务器端技术,和大家熟悉的ASP,ASP.NET,JSP和PHP的运行机制类似。只是ASP等动态网页技术,是把界面元素解析为HTML发送给客户端的浏览器来展现;而Flex和Laszlo是把界面元素解析为二进制的swf文件,运行到浏览器中的Flash Player插件里。
AIR
AIR之前称为Apollo,Adobe官方的解释为:是一个跨操作系统的运行环境,允许开发人员使用以前Web开发的技能来创建Rich Internet Application,并部署到桌面上运行。总体来说,AIR就是Adobe 把现有的技术,如:Flash、PDF、JavaScript、XML和ActionScript集成在一起,并提供一个客户端运行环境,可以让开发人员开发可以访问Internet资源的桌面程序。本质上,AIR就是让Flash(或者Ajax)脱离浏览器运行的一个桌面应用程序运行环境。
要开发AIR应用程序,也很简单,有两种技术可供选择:一,使用HTML+JS技术;二,使用Flex+Flash。可使用的开发工具也就是开发上述技术的工具,如:flex builder、 flash IDE、eclipse、notepad 等等。
使用AIR来开发RIA的优缺点和Flex等类似,最大的好处就是:可以脱离浏览器成为一个独立的桌面程序而运行,并且不受浏览器安全限制,可以有更多的权限访问本地资源。
目前,AIR还在测试阶段,很多功能还不完善,相信等正式版发布后,会有更多特性值得我们期待。
WPF
一直以来,应用程序的用户界面都可以用不同的技术开发,从MFC到VB,从Windows Forms到HTML+JS。对于开发人员来说,这就需要针对不同的应用程序类型,使用不同界面开发技术。随着Flash等多媒体2D或者3D界面的出现,选择就越来越多。如果想使用一种技术就能开发各类应用程序的界面,这将是一个巨大的挑战。
Windows Presentation Foundation (WPF),最初代号为“Avalon”,目前作为 .NET 3.0的一个组件发布,就是为解决这一难题而设计。
WPF 为桌面客户端和浏览器客户端提供了通用基础,大大简化了二者的应用程序开发工作。WPF 采用更为现代的方法,支持视频、动画、2D或3D图形以及各种类型的文档,从而可以让用户以全新的方式处理信息。此外,WPF 还为桌面客户端和浏览器客户端提供了通用基础,大大简化了二者的应用程序开发工作。
作为微软的下一代界面技术,WPF的最大特点就是把界面的布局描述和界面逻辑代码分离。WPF通过XAML(扩展应用程序标记语言,一种基于 XML 的语言,允许以声明方式指定用户界面,而非代码)把专业界面设计人员的工作和专业的程序开发人员的工作分开,让他们更容易协作,以开发出界面炫丽,功能强大的应用程序。
同时微软为不同的工作提供了不同的工具,针对界面设计人员,推出Expression Studio;针对程序开发人员,推出Visual Studio 2008(有望今年年底发布RTM)。
通过提供更强大的图形支持功能,WPF 使得一系列数据可视化成为可能,而这依靠 Windows Forms 或其他的早期技术是不可能实现的。WPF 还提供了 XML Paper Specification (XPS) 的基础,可定义查看、分发和打印固定格式文档的标准格式。
Silverlight
Silverlight最初的代号叫“WPF/E”,意为WPF run on Everywhere,它是WPF的一个子集。Silverlight被社区称为微软出品的Flash Killer。
官方对其的定义是:“Silverlight是一个跨浏览器的、跨平台的插件,为网络带来下一代基于.NET的媒体体验和丰富的交互式应用程序”。Silverlight提供灵活的编程模型,支持AJAX, VB, C#, Python, Ruby等语言,并集成到现有的Web Application中,能够访问其中的DOM信息。内置多媒体技术的支持,可以以很低的成本播放媒体文件。
目前,Silverlight发布了两个版本, 1.0 beta和1.1 alpha。可以运行于Windows和Mac平台下。同时Mono项目也在积极的开发Moonlight,一个在Linux下的Silverlight实现。
XUL
XUL 是一种基于XML的用户界面语言,它来自于Mozilla的开放源码项目。它可用于建立窗体应用程序,这些应用程序不但可以在 Mozilla浏览器上运行,而且也可以运行在其他描述引擎上,如Zulu(一个Flash MX组件)和Thinleys(一个Java实现)。XUL描述引擎都非常小(100K以下),它可以使用XML数据也可以生成XML数据。XUL的一个主要缺点在于它目前还没有获得一个主要商业实体的支持。XUL最大的优点在于它与Gecko引擎的集成(打开了通向大量Web标准的大门),以及与大多数其它XML用户界面描述语言相比,它是一种非常具有表达力和简洁的语言。
目前XUL可以嵌入在Mozilla(或FireFox)浏览器中运行,也可以通过一个XUL Runner的运行环境,脱离浏览器运行。
JavaFX
“JavaFX是一个构建于Java技术之上完整的运行环境,可以用来交付到桌面、移动设备、手持设备和电视等环境的富互联网应用(RIA)。”SUN如此定义JavaFX。JavaFX是SUN进入RIA领域的开发技术,它包含JavaFX Script和JavaFX Mobile两个部分,使用一种全新的脚本语言,依赖Java SE/ME运行时,利用Java2D和Swing API来实现在桌面或者移动设备上运行RIA应用。
三类RIA技术比较
通过上面各种RIA开发技术介绍,我们可以看到它们各自的理念有所不同,运行的环境也不尽相同。总体说来,RIA开发技术分为三类:
1. 浏览器类,整个RIA是运行于浏览器里面,依靠传统的HTML+CSS+JavaScript技术来实现界面的表现和控制。
2. 浏览器插件类,RIA通过插件的方式运行于浏览器中。正在运行的程序是厂商特定的运行格式,需要特定的运行环境。
3. 桌面类,RIA脱离浏览器直接运行于桌面之上。和常见的桌面程序很类似,但是可以访问Internet资源,并具有部署容易,更新简单的特点。
在三种分类的技术中,浏览器技术是成为开发RIA最直接的技术,此类技术适合一直在做Web应用的软件开发商。
新型桌面技术则完全另起炉灶,充分使用桌面开发的技术、技巧和理念,并结合Web Application部署方便,即时安装的优点。此类技术适合做Windows应用的开发商。
浏览器插件则在浏览器技术和新型桌面之间进行了折衷,既使用新的技术来实现丰富的界面,又能和现有的Web技术进行部分的集成。
哪种RIA技术适合你
RIA是未来应用系统开发的一个重要方向,很多软件开发企业,开发团队和开发人员都希望在未来找到一个适合自己的技术,从而让自己事半功倍,在提高开发效率,降低开发成本的同时,又能交付给客户体验丰富、功能完善的软件系统。
虽然在上面我们介绍了各种技术及其优缺点,并对他们进行了一个归类,但是要回答“我们该选择那种”这个问题,还需要考虑下面的情况?
首先是我们自身的情况:
◆ 目前你的技术能力主要在Web开发方面还是Windows开发方面?
◆ 目前你开发的应用程序功能类型是内容展现为主还是事务处理为主?
◆ 目前主要在使用那个厂商或组织的技术?.NET 或者JAVA 或者其他Web技术?
◆ 目前是否在进行RIA或者类似RIA的开发?
◆ 目前在使用那种RIA开发技术?
其次是考虑技术的选择标准:
◆ 学习成本,开发效率
◆ 对应用程序类型的适合性
◆ 运行环境部署成本
◆ 运行效率
◆ 完善的功能特性
◆ 技术授权成本和服务器部署成本,开源、免费或收费
◆ 官方和社区的技术支持
◆ 完善的开发工具
◆ 完善的UI组件
◆ 跨平台特性
最后,我们根据自己的具体情况和选择技术的标准,可以为对这些技术进行一个定位和排序。
以技术运行环境部署成本来比较(由低到高):
Ajax > Flex/Laszlo > Silverlight > XUL > WPF > AIR > JavaFX
以技术授权成本来看:
开源的有:Ajax,Laszlo,XUL,JavaFX
免费的有:Silverlight,WPF,AIR
收费的有:Flex
从技术支持来看:无疑Silverlight和WPF会获得最好的官方支持,Flex的官方技术也在改善,其他技术主要依靠社区的支持。
就开发工具来看:Silverlight和WPF可以有最强大的工具使用,Flex、AIR和Laszlo也有优秀的IDE可供使用,JavaFX的开发工具尚未明朗,Ajax要看具体的实现而定,XUL的开发工具进展缓慢。
就可使用UI组件的情况来看:WPF和Silverlight需要自己扩展或者使用第三方的;Flex、AIR和Laszlo都提供了丰富的UI组件,XUL自己有一套基本够用的UI组件,JavaFX依赖JRE自带的UI工具箱。
对于跨平台特性和兼容性我们也可以得到一个排序:
Flex/Laszlo > Ajax > XUL > JavaFX > AIR > Silverlight > WPF
总而言之,要选择一种适合自己的RIA开发技术,需要从各个方面来权衡。不仅要明确自己的情况,考虑未来的需求,也要熟悉每种技术的差异和优缺点,这样才能找到一种正确的技术。
表1 Ajax的优缺点
表2 Flex的优缺点
表3 Laszlo的优缺点
表4 WPF的优缺点
表5 Silverlight的优缺点
表6 XUL的优缺点
表7 JavaFX的优缺点
表8 RIA技术的总体分类
表9 不同技术能力的开发商在各种技术上的学习成本
表10 各种技术在不同应用类型上的适应性
表11 各种技术在不同平台类型上的适应性