内容


使用最佳的开源客户端框架进行云计算

开发基于云的软件即服务(SaaS)应用程序

Comments

学习如何构建富软件即服务(SaaS)应用程序的价值不言而喻。但是选择哪条路来提高构建这种软件所需的技能呢?过去,SaaS 开发意味着选择一种语言,负责在调用相应的 URL 时在浏览器中呈现必要的 HTML,然后选择一个数据库根据需要存储数据。与此相反,现代 SaaS 应用程序开发需要您做出很多其他决定,如图 1 所示。其中一个决定就是使用哪种客户端语言或以 RIA 为中心的框架。尽管客户端语言和服务端平台之间存在通信,但客户端与服务端应用程序是独立运行的。

图 1. SaaS 的 4 个层次以及每个层次使用的技术
SaaS 的 4 个层次
SaaS 的 4 个层次

术语软件即服务(Software as a Service)的含义与富 Internet 应用程序 的含义有很大的相似性。毕竟,目前大部分 SaaS 产品和服务都是使用 RIA 技术构建的。实际上,在如今的计算中,只有使用 RIA 技术构建的 SaaS 才会成功,因为 RIA 方法以用户体验设计 (UXD) 的概念为中心。因此,在本文中,我将成功的 SaaS 定义为提供丰富用户友好体验且最终允许用户更加有效工作的应用程序。

评估标准

每一种可用于 RIA 和 SaaS 的主要客户端开发框架都有自己的优缺点。因此,必须建立一组指南和标准来评估每一种框架。最重要的一点是,必须采用一种公正的方法,评估时只用事实和数字说话,不要带有个人的喜好。

第一个标准是,框架必须是开源的。关于 JavaFX 是否是开源产品争议较大,JavaFX FAQ 也没有提供一个明确的回答。但有一件事情很清楚:Sun Microsystems 提到该技术时使用了将来时态:“JavaFX 终有一天将会完全开源。” 考虑到它对开源平台的大力支持,Sun 在这一点上应该不会食言。尽管 JavaFX 的社区做了很多贡献,但这项技术在 2010 年以前可能不会完全开放。

该标准将我们的选择集中到两个主要的竞争者:Adobe Flex 和 Laszlo Systems' OpenLaszlo。有趣的是,这两项技术都可以编译为 SWF 格式,主要的区别在于,Flex 基于 Adobe ActionScript,而 OpenLaszlo 以 JavaScript/Asynchronous JavaScript + XML (Ajax) 为基础。必须注意的一点是,尽管 OpenLaszlo 编译为 SWF 格式,但它也可以在支持标准 Dynamic HTML (DHTML) 的浏览器中运行,不需要从 SWF 运行。

图 2 中对 Flex 和 OpenLaszlo 进行了进一步比较。您的目标是确定 4 种主要的客户端 RIA 中哪一种最适于 SaaS 开发。

图 2. 开源开发框架的基本比较图
比较开源 RIA 开发框架
比较开源 RIA 开发框架

用于评估这些客户端开发框架的其他标准包括:

  • 成熟度
  • Web 服务支持
  • 开发所需工作量
  • 社区参与度
  • 软件要求

成熟度

成熟度使用框架当前版本以及框架的开发所花费的时间长度来度量。

Flex

Flex 框架的开发在 2002 年由 Macromedia 启动。Adobe 在 2004 年收购了 Macromedia,也继承了 Flex。Flex SDK 在 2006 年随 Flex V2 一起发布到开源社区。Flex V4 SDK 的 beta 版本于 2009 年 6 月 1 日发布,在本文编写之时,预计 2009 年底将结束 beta 版本。

OpenLaszlo

OpenLaszlo 2001 年随着 Laszlo Presentation Server (LPS) 的开发开始,由 Laszlo Systems Inc 创建。2004 年 10 月,Laszlo Systems 在 GNU Public License (GPL) 的基础上发布了 LPS 源代码,启动了 OpenLaszlo 项目。2005 年随着 V3 的发布,LPS 更名为 OpenLaszlo。OpenLaszlo 当前稳定版本为 V4.4。

领先者:OpenLaszlo

严格的说,OpenLaszlo 的开发在 Flex 之前,尽管它使用的是另一个名称,Laszlo Systems 的发行版一直在 Adobe 之前。Flex SDK 在第 4 次更替开发时还是 beta 版本,而 OpenLaszlo 已经有一个统一的发布计划 — 当前为 V4.4 — 这使 OpenLaszlo 略胜于 Flex。

Web 服务支持

在比较客户端开发技术时,Web 服务支持是一个重要的考虑因素,因为支持的协议在很大程度上会影响 UI 的反应速度。例如,JavaScript Object Notation (JSON) 和 Action Message Format (AMF) 消息的有线传输一般比 Representational State Transfer (REST) 和基于 SOAP 的服务要快,因为数据被压缩为二进制格式。这会使用户感觉到性能大大提升,因为数据的检索和处理速度变得更快。这就是说,客户端开发技术支持各种通信协议非常重要。

关于通信另一件要记住的事情是,开发人员并非总是控制发送和接收数据的方式。很多情况下,这是由服务器端开发人员预先确定好的,也可能挂钩预先存在的 web 服务,而该服务只支持某种特定的协议。这也是理想的客户端开发工具应该支持所有现有通信协议的另一个原因。

Flex

Flex 在支持几乎所有 Web 服务协议上花了很多精力。ActionScript Virtual Machine (AVM) 本身就支持 Adobe 自己的 AMF 和 Real Time Message Protocol (RTMP),大大简化了 Flex 应用程序以及任何支持这两种协议的服务器端语言之间的快速二进制数据传输。如果项目中包含 AS3CoreLib ActionScript 库,那么还将支持 JSON。值得注意的是,AMF 和 RTMP 是开放协议,大部分服务器端语言通过使用插件、库和 API 支持 AMF。Flex 还支持标准的 HTTP 服务和通过 HTTP 的 XML。这在对真正 RESTful 服务的内部支持方面会造成一定的限制,但是通常可以很好地集成任何通信协议。

OpenLaszlo

OpenLaszlo 以两种模式运行:Proxied 模式SOLO。在 Proxied 模式中,客户端直接耦合 Java™ servlet 并在 servlet 容器内部或者 Java 2 Platform, Enterprise Edition (J2EE) 应用程序服务器(如 Apache Tomcat、IBM® WebSphere® 或 JBoss)中运行。在该模式下,SOAP、XML-RPC 和 Java Data Transfer Object (DTO) 映射都可以使用。在第二种模式 — SOLO — 下,客户端应用程序独立于 OpenLaszlo 代理服务器运行。只支持通过 HTTP 上的 XML 传输数据。

领先者:Flex

OpenLaszlo 在 Web 服务支持方面远远落后于 Flex,因为它需要配合 OpenLaszlo Java servlet 才能支持 SOAP 和 XML-RPC。考虑到它对 Ajax 的依赖,以 SOLO 模式运行时,OpenLaszlo 以 Web 服务的 XMLHTTPRequest 对象为基础构建。不幸的是,与几乎每个服务器端语言都是用的 Adobe 二进制 AMF 相比,请求—— 响应时间要慢的多。因此,我不得不宣布 Flex 在这个标准中远远领先。

开发所需的工作量

Flex 和 OpenLaszlo 框架实现其自己的基于 XML 的对象声明语言。具体来说,Flex 使用 MXML 声明 ActionScript 对象和属性,OpenLaszlo 使用 LZX 声明 JavaScript 对象和属性。MXML 和 LZX 使用相同的基 XML 对象符号 — 唯一的不同在于所使用的 DTD 结构和 XML 架构。它们的核心目的是相同的:加快客户端应用程序和 UI 的开发速度。

Flex

Flex 使用 MXML 作为其声明性标记语言,它遵循基本的 XML(像所有的声明性语言一样)。大部分时间,Flex 应用程序包括 MXML 和 ActionScript 类。但是,编译 MXML 文件时,声明的对象在编译为单个二进制 SWF 文件之前转换为 ActionScript。列表 1 中的代码示例演示了 Flex DataGrid 组件的 MXML 标记。有趣的是,您可以将 ActionScript 代码放在对象属性引号内部的大括号 ({}) 之间,如 dataProvider 属性所示。

列表 1. Flex DataGrid 组件的 MXML 示例代码
<mx:DataGrid id="peopleGrid"
    dataProvider="{_controller.contactData}" editable="false" 
    itemClick="dispatchItemClick(event);" >
   <mx:columns>
      <mx:DataGridColumn id="contact_id" headerText="ID" dataField="id" width="50" />
      <mx:DataGridColumn id="last_name" headerText="Last Name" dataField="last_name" />
      <mx:DataGridColumn id="first_name" headerText="First Name" dataField="first_name" />
      <mx:DataGridColumn id="grid_email" headerText="Email" dataField="grid_email" />
   </mx:columns>
</mx:DataGrid>

OpenLaszlo

记住,OpenLaszlo 使用 LZX 作为其声明性标记语言,与任何组成良好的 XML 一样,这也需要遵守相同的基本原则。使用 LZX,您可以将 JavaScript 函数放在 <method /> 标记内并给该方法分配自己的 ID。列表 2 所做的事情与列表 1 中的 Flex 代码一样,创建一个网格显示表格数据。

列表 2. OpenLaszlo 网格组件的 LZX 示例代码
<canvas width="800" bgcolor="0xeaeaea">
    <bluestyle name="bluecolors"/>
    <dataset name="contactsData" request="true" 
    type="http" src="contactsdata.xml"/>
    
    <grid datapath="contactsData:/*" sizetoheader="false">

    <gridtext editable="false" width="50"
        datapath="position()" resizable="false"
        sortable="false"> ID </gridtext>
     <gridtext datapath="@firstname"> First </gridtext>
     <gridtext datapath="@lastname">Last </gridtext>
     <gridtext datapath="@displayname"> Fullname </gridtext>

   </grid>

</canvas>

领先者:平手

随着这两项技术的成熟,每种框架的持续开发基本原则保持一致:用更少的时间做更多的工作。换句话说,能够使用 MXML 做更多的工作意味着需要更少的 ActionScript 代码。类似地,使用 LZX 标记做更多的工作意味着需要编写的 JavaScript 代码更少。这就意味着您需要做的工作更少。大部分情况下,目前使用 OpenLaszlo 编写应用程序与使用 Flex 编写应用程序所需的时间是一样的。再加上两个平台之间的相似性,很难判断哪一种更加优秀。考虑到这些方面,我宣布二者在这一回合中打成平手。

社区参与度

像任何开源技术一样,社区参与度是平台应用和发展速度的关键因素。一项技术的社区支持度并非总是通过贡献代码的人数来度量的。实际上,通过 “开源记者”(在博客中发布教程和专业入门文档供该技术新手参考的人)的数量来确定社区参与度更加容易。进一步说,强大的社区往往有大量的质量保证 “分析员” 通过项目的 bug 数据库报告 bug。

Flex

在 V2 之前,Flex 就吸引了大量眼球的注意,这很大程度上归功于 Adobe 收购 Macromedia 后所做的市场努力。因此,Flex 社区在 2006 年 Flex SDK 作为开源产品发布后迅速壮大。社区规模围绕着 Flex SDK 的演化继续以该速度增长。

OpenLaszlo

尽管 OpenLaszlo 成功获得了许多企业的支持,包括 Pandora、YouTube 和 Amazon,但 OpenLaszlo 社区的规模相对较小。可能这与市场营销的关系很大,无疑 Adobe 在公司规模和营销预算上比 Laszlo Systems 要大很多。

领先者:Flex

Flex 在社区参与度方面取得了胜利。Adobe 新闻聚合器(news aggregator) 仅在 Flex 一项上就有 2,370 feed。此外,从 Flex.org 开放社区和在线 Flex Cookbook(它就像是 Flex “代码库” 百科全书)可以获得许多资源,这都是社区发布的。

软件要求

这个标准包括在使用相应技术构建应用程序前必须要安装的任何必需插件或软件。这通常是一个很大的障碍,因为用户不愿意相信任何要安装在机器上的内容 — 尤其是在不知道的情况下安装的内容。此外,有些用户在看到由于缺少特定软件而无法运行时会感到困惑;这些用户在出现这种情况时甚至会抛弃整个网站。

Flex

Flex 应用程序通过 Adobe Flash® 播放器运行,在所有的软件应用程序和插件中,它的普及率是最高的。2009 年 6 月,Flash 播放器在全世界的普及率达到了 98.8%,在新兴市场的普及率是 97.1%。特别要注意的是,最新的版本 — Flash Player V10 — 从 2008 年 12 月的 55.9% 上升到 2009 年 6 月的 86.7%。

OpenLaszlo

如果说有什么让 OpenLaszlo 变得非常有趣,那么就是它编译为 SWF 文件,可以从 Flash 播放器和 DHTML 运行。OpenLaszlo 开发的历史表明,该框架的趋势是最终能够编译为可在 Web 浏览器运行的任何格式,包括 Java applets(与 JavaFX 一样)。但 OpenLaszlo 在一个领域遭遇了挫折:在本文编写之时,LZX 应用程序无法在 Flash Player V10 中运行,尚不知道何时才能运行。OpenLaszlo 应用程序可以兼容 7、8 和 9 版本的 Flash 播放器。

领先者:OpenLaszlo

OpenLaszlo 能够编译为多种文件格式,这使它成功的与所有其他客户端 RIA 框架区别开来。在最大客户端兼容性方面,OpenLaszlo 取得了胜利。

结束语

考虑到 RIA 社区对 Flex 的宣传,一开始似乎可以断言 Flex 将完胜 OpenLaszlo。但是,我发现实际情况并非如此。事实上,这两种 RIA 开发技术各有千秋,很难指出谁是 “最佳” 的框架语言。也许这次比较的意义在于:关注业务的需求并根据这些需求选择合适的开发技术。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Open source
ArticleID=424284
ArticleTitle=使用最佳的开源客户端框架进行云计算
publish-date=08312009