三种主流 RIA 技术之争,你该如何选型?

2009-02-05IT IT.业界评论

  前几天听说 Adobe 发布了用于 Flash Player 的 RTMP(实时消息协议),在“这里”。乍一看,好像是一个不错的东东。号称有如下优点:支持高性能地把数据(主要是音频、视频)PUSH 给 Flash Player;支持 over HTTP 和 HTTPS。再联想到最近1-2年,微软在 Silverlight(详细介绍看“这里”)上也是频频出击。而 Sun 也不甘寂寞,搞出了一个 JavaFX(2个月前刚发布,详细介绍见“这里”)。看来RIA领域的竞争有白热化的趋势。干脆今天就来八卦一下这三个技术。
  有同学可能会问了,为啥不顺便提一下 AJAX 捏?主要是因为 AJAX 和那三个玩意儿有很大的差别,不属于同一个维度,没有可比性(绝没有贬低 AJAX 的意思)。所以今天暂且抛开不谈(下次如果有空再聊 AJAX)。

★先说说 Flash/Flex


  Flash/Flex 早先是由 Macromedia 搞出来的。Adobe 目光独到,在2005年把 Macromedia 吞并了。于是 Flash/Flex 就成了 Adobe 的如意法宝。其实当初收购 Macromedia 的价格并不高,也就34亿美金。这个数字对微软来说是小意思,可惜当初微软真是瞎了眼,没有先下手。否则现在 RIA 市场的格局就是另外一番景象了。话说回来,Adobe 买下 Macromedia 后,对 Flash 也是下了大本钱,再加上那几年没有直接的竞争对手。因此到了2007年,Flash/Flex 已经成为 RIA 市场的事实标准,当时的 PC 占有率少说也有70%。而且开始进入手机市场。
  目前 Flash/Flex 主要的优势一个是用户群大,还有一个是跨平台(包括操作系统、浏览器、移动设备)。
  不过我这2-3年用下来,感觉 Flash/Flex 也有不少问题。一个主要的问题是语言的兼容性不够好,当初从 ActionScript2 迁移到 ActionScript3,团队里的人怨声载道(很多代码几乎要重写)。还有一个问题是功能不够强,让人感觉很不爽。比如至今不能够很好地支持多线程(仅支持异步回调);比如不能很好地整合 PDF(照理说都是自家公司产品,整合应该不难)。

★再说说 Silverlight


  估计是到了2006年后,微软发觉苗头不对,赶紧下大力气自己搞。在2007年底和2008年底分别发布了 Silverlight 1.0 和 Silverlight 2.0(3.0据说2009年也有望推出)。然后商务层面也接连出手:先是2008奥运期间与 NBC(美国国家广播公司)合作,用 Silverlight 进行赛事直播;接着在上个月美国总统就职典礼,也用上了 Silverlight。微软的意图非常明显,就是市场方面利用各种机会争夺用户占有率,弥补对 Flash 的劣势;技术方面不断强化功能,力图甩开 Flex,吸引开发人员加入。
  要说 Silverlight 的优点,我觉得依托于 dotNET 是主要优势。借着 dotNET 这个靠山,Silverlight 能整合现有的某些语言(据说已能支持 JScript、IronPythonIronRuby、VB)和库;还能够方便原有的 dotNET 程序员上手。Silverlight 在功能上也显得比 Flex 更强大(比如多线程和 3D 方面)。
  不过依托于 dotNET 也导致了 Silverlight 的主要缺点:跨平台不够好。虽说现在有 Moonlight 的帮忙,但依然不够理想(尤其是对 Linux 的支持)。

★最后顺便提一下 JavaFX


  坦白讲,JavaFX 实在是乏善可陈。Sun 的一个主要失策就在于后知后觉,跟进太慢。微软下手已经慢了,结果 Sun 比它还慢。而 Sun 在财力上又比微软差了很多(Sun 现在自身难保,根本没法像微软那样烧钱搞推广),做 IDE 也不如微软拿手。真是天时、地利、人和皆无。难怪连 Java 社区对它也热情不高(有 Java 大牛Bruce Eckel的文章“Does Anyone Really Care About Desktop Java?”为证)。

★结论


  假如你要开发一个 Web 系统,打算从上述三种 RIA 技术中挑选一个。那么你先要评估一下你的 Web 应用对跨平台的需求如何?如果你需要同时支持各种各样的客户端操作系统和浏览器,那强烈建议你选择 Flex(我的部门现在面临的就是这种情况);反之,如果你铁定只要支持 Windows,或许也可以考虑 Silverlight。至于说 JavaFX,短期内就先不要考虑啦。