智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...

导航

RIA说文解字

Posted on 2009-11-30 09:22  Bill Yuan  阅读(358)  评论(0编辑  收藏  举报
近年来,RIA是一个相当时髦的名词。RIA的R与A分别是Rich与Application的意思,至于I的解释比较多种,依据各个厂商强调重点不同,I可以做Internet、Interactive或Interface解,分别强调网络链接、高互动以及美观的接口。我认为RIA的I应该同时兼具这三者,欠缺任何一个技术,都不应该称为RIA。

RIA是Web革命浪头下的新技术,因此不免要和Web扯上关系。而RIA之所以强调Rich,正是因为传统Web技术太过于Poor,毕竟以往的Web使用被动的网络链接(采用pull技术)、互动性不佳(任何动作都要送到后端,甚至整个页面换掉)、接口不好看(HTML是文字导向的接口语言)。

RIA是一种开发技术,而不是一种末端应用。其中,所谓的Rich是一种经过比较的结果,和静态网页技术相比(这里指的静态网页技术,是指浏览器端没有执行任何程序),Ajax称得上Rich,因此有些人也会将Ajax归类为RIA。但是和WPF/Silverlight、AIR/Flash等富豪之家相比,可就是小巫见大巫,Ajax只能算是家境小康。

真正Rich的应用,在RIA一词出现之前,我们老早就看过许多。那些极度耗费3D显示适配器和处理器运算能力、声光效果极佳、让青少年在网咖流连忘返的在线游戏,可说是Rich Internet/Interaction/Interface的极致,为何我们不称这些在线游戏为RIA?

重点在于它们没和Web扯上关系。因此,当RIA的I被解释成Internet时,指的可不是TCP/IP而已,而必须是标准的Web Protocol(也就是HTTP)才算是。当RIA的I被解释成Interface时,也要尽量和Web相容。

为了尽量和Web兼容,RIA最基本的作法是,将执行环境设计成浏览器的插件(Plug-in),让各式各样的应用可以在上面执行。

这听起来根本就是十多年前的Java Applet,尽管当时尚未出现RIA这个流行词汇。Java一开始之所以吸引大家的注意,正是因为Java Applet。但是由于诸多问题(启动时间太长、执行效能太差、为Applet签署太麻烦),Java Applet终究是未能在市场上大放异彩。

技术市场就是这样,几年之后你会看到旧的观念和技术卷土重来,只是名字变了,但换汤不换药。随着Flash的成功,Adobe不满足于Flash只能做动画,希望让Flash能成为有威力的程序平台,于是他们提出RIA的观念,并预计在2008年初推出AIR(Adobe Integrated Runtime)。事实上,AIR/Flash和Java Applet的概念是一样的。

接着,微软也进入RIA市场,推出WPF/Sliverlight;然后,Java也准备卷土重来,推出JavaFX。一时之间,RIA热闹滚滚。

这RIA三强(或者说两强一弱)还有3个共同的特点:

● 在浏览器内/外皆可执行
● 上线和脱机皆可执行
● 都意图同时支持各种装置(PC、手机……)

对于「开发者」来说,这三者共同的特点是:Client端的「GUI描述」和「程序逻辑」分开,「GUI描述」改用宣告(declarative)的方式。但是三者的开发理念仍有不同之处,从语言的角度来看,JavaFX比另外两者先进,因为JavaFX使用DSL(Domain-Specific Language),而非XML。JavaFX是专为设计GUI而打造的语言。

目前Flash的普及率约96 %,Java约87 %。至于.NET,我找不到相关的数据,但推估应该小于50 %,因此,短期内Adobe应该还是赢家。但是,依据历史经验,微软总有后发先至的本事,我估计3、5年后,WPF/Silverlight可能会胜出。至于JavaFX,虽然是好语言,但搭配不好的平台和不好的营销,以及落后对手的时程,未来发展恐怕不乐观。

尽管大家都将RIA的目光放在Adobe、微软、Java的三大技术上,但我希望大家不要忽略了一些小厂商推出的优秀RIA技术,其中,我尤其推崇Curl(http://www.curl.com/),我称它为「RIA的另类疗法」。

你可能会很喜欢Curl的技术,但是用Curl开发商业应用之前还是要三思。因为一旦每个新客户都必须下载安装Curl的执行环境,多一道手续就可能少一些客户。另外,Curl的商业授权相当贵,这年头敢把开发工具软件定价这么贵,需要相当程度的「勇气」,或许这也反映出它们对于自己产品的信心。

你可能会纳闷,为何你喜爱的某Open source语言(例如Ruby),不推出Plug-in,让你可以写RIA程序。重点在于,大多数open source语言没有自己的GUI套件,都是依赖外部的套件(例如TK),这些外部GUI套件又相当庞大,根本不适合当作RIA Solution。所以,想开发RIA系统,你还是得从目前台面上的技术中做抉择。