2024年1月27日发(作者:)

第1章 谈谈RIA

关键词

RIA(Rich Internet Applications)的概念近几年逐步深入人心。可以说,RIA已经是软件发展的大势所趋。RIA并不专指某项技术,它是建立在对用户友好程度(即用户体验)认知基础上的对软件的一种期望。理解这个概念并不难,我们只要把握“丰富”、“Web”、“可交互性”这几个关键词,就能透过表象洞察RIA的精髓。

RIA阵营中如今已经包含了多个解决方案,呈现出“百花齐放”的局面,多个厂商(比如微软、Sun)都相继推出针对RIA的产品。然而不得不说的是Adobe,这个传统印刷领域中有着Photoshop等强势产品的巨人在接收Macromedia之后,依托Flash Player这个平台,迅速地在RIA领域取得先机。Flash和Flex的知名度已经很高了,而本书将为大家着重介绍的乃是它的另外一个平台级的产品——AIR。AIR是一个允许使用现有的Web技术来完成桌面应用的RIA平台。本章将从RIA谈起,介绍其概要并详细地阐述AIR的产

RIA体验

RIA的优势

RIA中的AIR

Adobe AIR完整入门与开发实录

使用FlexFlashAjax开发AIR应用

生背景。

本章也将简单地介绍一下“用户体验”的概念,这个概念并不复杂,但读者是否已经将它贯穿到了自己的产品中呢?通过阅读本章,希望可以从理念上给予读者一些启迪。

[

4

]

第1章 谈谈RIA

Adobe AIR

1.1 了解RIA

在书的开始部分,我们有必要先介绍一下RIA的概念。或许你已经是RIA开发领域的老手,对RIA概念耳熟能详了,那么,温习一下也未必是件坏事。

RIA,即Rich Internet Applications,可译为“富互联网应用程序”(在Adobe的一些宣传文件中,也称之为Rich Interactive Applications,即“富交互式应用程序”),简而言之,RIA并不专指某项技术,也不像Java、C#是一门语言,它是一种软件开发的趋势(见图1.1),是建立在对用户友好程度(用户体验)认知基础上的对软件的一种期望。

图1.1 RIA的发展历程

理解这个概念并不难,只要把握“丰富”、“Web”、“可交互性”这几个关键词,就能透过表象,洞察RIA的精髓。

如前所述,RIA本身只是一个概念,这个概念的提出,也是基于更深层面的一个词——体验。何谓体验?简单地说,就是用户使用软件的直观感受。Adobe官方这样诠释RIA在体验方面的定义——“富互联网应用程序(RIA)提供丰富的、引人入胜的体验, 该体验可提高用户满意度并提高用户的生产效率。使用互联网的广泛触及力,可以在各种浏览器、桌面和设备上部署RIA”。就是说,“好的体验”是目的,“符合RIA”是核心概念,开发RIA则需要选择最适合的技术。当你可以做到脱离技术层面去看RIA时,也就看清楚了RIA的实质。

说到这里,可能性急的读者已经按捺不住了。既然RIA这么好,那么RIA可以为我们带来哪些优势呢?具体说来有下列优势:

RIA将指导我们开发更丰富、互动、友好的用户界面,提高客户满意度和粘滞度。

RIA可以继续使用现有的应用程序模型(包括J2EE和.NET),因而无需大规模替换现有的Web应用程序。通过Rich Client技术,可以轻松地构建更为直观、易用、反应迅速并可以脱机使用的应用程序。

RIA可以帮助企业提供多元化的重要业务效益,包括提高产销量、提高品牌忠诚度、延长网站逗留时间、获得较频繁的重复访问、减少带宽成本、减少支持求助以及增强客户关系等。

RIA技术的出现,允许我们在因特网上像使用Web一样以简单的方式来部署富客户[

5

]

Adobe AIR完整入门与开发实录

使用FlexFlashAjax开发AIR应用

端程序。无论将来RIA是否能够如人们所猜测的那样完全代替HTML应用系统,对于那些采用C/S架构的胖客户端技术运行复杂应用系统的机构和采用基于B/S架构的瘦客户端技术部署Web应用的机构来说,RIA确实提供了一种廉价的选择。

怎样才算符合RIA?一般说来,一个典型的RIA(见图1.2)应该包含以下技术特性:

在消息确认和格式编排方面提供互动用户界面。

在无刷新页面的情况下提供快捷的界面响应时间。

提供通用的用户界面特性,如拖放(Drag and Drop)以及在线和离线操作能力。

立即部署、跨平台、采用逐步下载来检索内容和数据以及可以充分地利用被广泛采纳的互联网标准。

RIA的通信特点包括实时互动的声音和图像。

图1.2 一个典型的RIA应用

1.2 RIA的主流技术

刚才已经说过,RIA是一种必然的趋势,在这种趋势下,各大软件开发厂商或开发阵营都推出了针对RIA的解决方案(见图1.3)。其中,在这方面最有实力和发言权的,当属Adobe公司。在并购Macromedia之后,可以说Adobe已经成为RIA领域的领头羊。当然其他厂商或组织的解决方案也不容小觑。

图1.3 RIA的主流技术

归结起来,现在用得比较多的技术可以列举如下。

1. Adobe Flash/Flex

Flash从6.0开始,就逐步具备建立窗体风格的应用程序的功能。根据Adobe的统计,如今已经有98%以上的桌面系统的浏览器都安装了Adobe Flash Player。这使得以Adobe Flash

[

6

]

第1章 谈谈RIA

Adobe AIR

Player为客户端的RIA可以支持种类广泛的平台和设备。

Flex是为满足希望开发RIA的企业级程序员的需求而推出的应用程序框架,它可以运行于J2EE和.NET平台。Flex提供基于标准的、声明性的编程方法和流程,并提供运行时服务,用于开发和部署富客户端应用程序的表示层。Flex开发者使用直观的基于XML的MXML来定义丰富的用户界面。Flex编译为SWF格式的客户端应用程序,在Flash Player中运行。

2. Adobe AIR

Adobe AIR运行时使开发人员能够使用已经过验证的Web技术来构建可部署到桌面并跨操作系统运行的富互联网应用程序。AIR是Adobe推出的具有创新性的应用,它的出现将弥补Web与桌面的鸿沟。AIR能使开发者在熟悉的环境下工作,利用开发者感觉最舒适的工具,通过支持Flash、Flex、HTML、JavaScript和Ajax,去建立接近需要的尽可能好的体验。

关于AIR,我们会在后面的章节中做详细的阐述,这里读者可以先有一个概念。

3. OpenLaszlo

OpenLaszlo是一个开源的RIA开发环境。使用Laszlo平台时,开发者只需编写名为LZX的描述语言(其中整合了XML和JavaScript),运行在J2EE 应用服务器上的Laszlo平台会将其编译成SWF格式的文件并传输给客户端展示。从这点上来说,Laszlo的本质和Flex是一样的。Flash是任何浏览器都支持的展示形式,从而一举解决了浏览器之间的移植问题。而且,在未来的计划中,Laszlo还可以将LZX编译成Java或.NET本地代码,从而大大提高运行效率。

4. Silverlight

微软Silverlight是一个跨浏览器、跨客户平台的技术,能够设计、开发和发布有多媒体体验与富交互(Rich Interface Application,RIA)的网络交互程序。因为Silverlight提供了一个强大的平台,能够开发出具有专业图形、音频和视频的Web应用程序,增强了用户体验,所以Silverlight吸引了设计人员和开发人员的眼球。同时,Silverlight还提供了强大的工具来提高他们的工作效率。Silverlight能创建一种具有很高艺术性的应用程序,可以使用已经具有的技能和熟悉的工具来创建基于Silverlight的应用程序,在Web页面中,既可以使用HTML,也可以使用Silverlight的WPF元素。和HTML一样,在Web应用程序中XAML同样可以使用声明的标记来创建用户界面,不同的是,XAML提供了更强大的元素。

Silverlight的核心是浏览器增强模块,其作用是呈现XAML并在浏览器界面上绘制生成的图形。它的下载体积较小(不到2MB),可以在用户点击包含Silverlight内容的站点时进行安装。该模块向JavaScript开发人员公开XAML页面的底层框架,以便实现页面级的内容交互,这样,开发人员就可以进行自己的工作,例如编写事件处理程序或使用JavaScript代码来处理XAML页面的内容。

Silverlight将会更加灵活和具有交互性,并且具有高超的矢量方式,可以对图像进行无限制的伸缩,这些都对Flash的地位发起了挑战。

5. Java SWT

Java已经出现若干年了,并且完全支持创建基于窗体的用户界面。除了Java基础类

[

7

]

Adobe AIR完整入门与开发实录

使用FlexFlashAjax开发AIR应用

(JFC/Swing)中的用户界面组件之外,开发人员还可以使用来自于Eclipse Project的SWT工具箱和许多第三方工具箱进行开发。对于图形来说,可以采用Java 2D API,这是一个非常完整且非常复杂的图形API。你可以通过一个Web浏览器使用Java插件,或使用Java运行时环境中较新的Java Web Start技术来部署应用程序。

使用Java建立Rich Client的主要缺陷是它的复杂性(即使对简单的窗体和图形也要求编写非常繁琐的代码),以及Java浏览器插件的低市场占有率。

6. XUL

XUL (读作“zool”)是一种基于XML的用户界面语言,它来自于Mozilla的开放源码项目,可用于建立窗体应用程序,这些应用程序不但可以在Mozilla浏览器上运行,而且也可以运行在其他描述引擎上,如Zulu(一个Flash MX组件)和Thinleys(一个Java实现)。XUL描述引擎都非常小(100KB以下),它既可以使用XML数据也可以生成XML数据。XUL的一个主要缺点在于它目前还没有获得一个主要商业实体的支持。XUL最大的优点在于它与Gecko引擎的集成(打开了通向大量Web标准的大门),以及与大多数其他XML用户界面描述语言相比,它是一种非常具有表达力的、简洁的语言。

7. Bindows

Bindows是用JavaScript和DHTML开发的Web窗体框架。JavaScript用于客户端界面的显示和处理,XMLHTTP用于客户端与服务器的信息传输。

JavaScript在客户端的表现力不容置疑,利用JavaScript几乎可以实现Windows应用程序所能干的大部分事情,XMLHTTP一直以来常被用于实现“无刷新”的Web页面,它与JavaScript配合,可以完成数据从服务器和客户端的传输。

Bindows的一个主要的缺点是它采用一次全部载入的方式来实现脚本库,在窗口的加载期,需要一个漫长的等待过程,甚至浏览器的进程会产生无响应的情况。

另外,Bindows内部大量利用了IE6的技术,没有考虑到非IE的浏览器,这些限制了Bindows的流行。

1.3 是Web还是桌面

曾几何时,桌面程序一统天下,繁琐的安装过程和高昂的部署成本成为困扰软件界的难题。在这个背景下,出现了一些基于Web的软件应用,比如网络邮箱、搜索、在线聊天工具等。这些基于Web的应用软件,具有快速部署、无需安装、升级维护成本低等特点,一时间成为软件开发的热门方向。浏览器的不断进步和升级,也为Web软件的应用提供了繁衍生息的土壤。但随之而来地也衍生了很多困扰Web软件的问题,包括浏览器兼容性、安全性限制,本地操作受限,无法实现离线数据,有限的用户体验实现等。

这些问题,也将桌面软件的优势重新提上了日程。是Web还是桌面,便成了一个有争议的话题。

[

8

]

第1章 谈谈RIA

Adobe AIR

在开始争论之前,我们通过表1.1,看一下Web软件和桌面软件的具体比较。

表1.1 Web软件与桌面软件的比较

应用程序交付

安装

应用程序更新

浏览器应用

可以轻松地发现、研究和使用应用程序

无需应用程序安装

通过将新内容推送到某个网站, 更新应用程序

可以在多个操作系统和浏览器上运行应用程序

桌面应用

已安装的应用程序拥有更强大的持久性、能力和功能

需要安装

需要手动的或半手动的更新

支持多个操作系统 很难跨平台

编程语言

JavaScript 由浏览器提供, 而ActionScript集成的JavaScript和ActionScript虚拟机与浏由Adobe Flash Player提供

仅可以在可见的浏览器窗口中运行

览器兼容

应用程序可以在后台运行, 或者可以像传统的桌面应用程序一样提供通知

后台功能

持久性

活动仅限于浏览器会话。当浏览器关闭时, 可在桌面安装并可用。它们在本地存储信息信息会丢失

应用程序已沙箱化, 桌面集成受到限制

并脱机操作

应用程序可以访问某个桌面文件系统、剪贴板、拖放事件、系统任务栏/通知等

桌面集成

用户界面控制

在某个浏览器窗口中运行, 该窗口拥有它拥有一个可定制的用户界面和桌面集成, 使自己的控件、品牌及与桌面的集成 用户能够获得品牌体验

数据存储

应用程序具有有限的本地存储, 可能会遭应用程序拥有无限制的本地存储和对本地数到浏览器的破坏 据库的访问权限, 以及加密的本地存储

通过这些比较可以发现,无论是Web软件还是桌面软件,都有其优势和劣势,都有适用和不适用的方面。也就无法粗略地说是Web好还是桌面好,而要具体情况具体分析。

当然,在两者各有优缺点的情况下,如果可以出现一种解决方案,融合两者的优势,避免两者的缺点,那么无疑会成为一种新的趋势。AIR就是在这个背景下出现的,下面的章节中将对AIR做详细的诠释。

1.4 RIA中的AIR

Adobe AIR是Adobe在RIA应用领域的一个重量级解决方案(这里可能有些绕口,读者稍微注意一下,不要把RIA和AIR混淆了)。为什么说它是重量级的?它在RIA领域起到什么样的作用呢?

首先,AIR是一个运行时(Runtime)平台,它不是一种单纯的语言,而是为RIA应用提供

[

9

]

Adobe AIR完整入门与开发实录

使用FlexFlashAjax开发AIR应用

一个基础的支持平台,如果需要做横向类比的话,我们可以参照.NET的Framework,这样或许可以更好地理解“运行时”的概念。

平台意味着开放,任何RIA开发者都可以开发基于AIR的RIA应用,而这些好的RIA应用反过来也将促进AIR平台的普及,这是一种相互促进的关系。在Adobe的官方网站上,我们也看到了Get AIR的链接,它和Get Flash Player并列(见图1.4),这也说明了Adobe对AIR的重视程度。

图1.4 从Adobe官网获取AIR的链接

其次,AIR虽然本身是个新的平台,但它的学习成本并不高,开发者完全可以基于现有的开发模式来开发AIR应用,所不同的地方就是要注意AIR提供的是新的API而已。这对开发者而言是非常友好的,不需要额外付出过多的学习成本就可以上手。

第三,AIR支持HTML开发模式,如果你是一个传统的Web开发人员,这无疑是个非常好的消息,你可以使用HTML+Ajax创建RIA应用,而且不用考虑跨平台和跨浏览器(AIR会帮你做到这些)。

第四,AIR支持Flash Player开发模式,无可否认,Flash Player是一个非常好的RIA应用的承载平台,其丰富的交互支持弥补了HTML的不足,最新的动作脚本AS3更是全面引入面向对象的开发机制,堪称RIA开发者的利器。Flash Player如今已经拥有极高的普及率(世界超过90%的个人电脑都安装了Flash Player),而且经过历次版本变更,在各方面已经变得相对成熟,这就意味着如果你选择基于Flash Player来开发,将拥有更高的开发效率和更低的开发风险。

第五,AIR现在的版本已经支持本地化,甚至可以通过简单的配置就能做到多语言的应用,不同语言的用户都可以使用我们的AIR应用。这真的是个非常有用的特性。

第六,再补充一点,AIR内嵌的Flash Player版本已经是10.0,也就是说,在AIR中开发应用也可以使用Flash Player 10的一些激动人心的新特性了,比如高级文本渲染,3D变换等,稍后在Flash的章节中会详细地介绍。

1.5 题外话一:用户体验设计

为什么要谈用户体验呢?从先前的章节中可以看到,RIA强调的一个核心就是用户体验,软件好不好用,用户说了算,所以说用户体验是最重要的。一个软件功能再强大,算法再优秀,如果用户体验没做好,也不算是一个RIA的应用,即使它使用了RIA相关的技术。

所以,让我们先来了解一下用户体验的基本概念。

用户体验(User Experience,UE)是一种纯主观的在用户使用一个产品(服务)的过程中建立[

10

]

第1章 谈谈RIA

Adobe AIR

起来的心理感受。因为它是纯主观的,就带有一定的不确定因素。个体差异也决定了每个用户的真实体验是无法通过其他途径来完全模拟或再现的。但是对于一个界定明确的用户群体来讲,其用户体验的共性能够经由良好设计的实验来认识到。

用户体验主要是来自用户与人机界面的交互过程。在早期的软件设计过程中,人机界面被看做仅仅是一层包裹于功能核心之外的“包装”而没有得到足够的重视。其结果就是对人机界面的开发是独立于功能核心的开发,而且往往是在整个开发过程的尾声部分才开始的。这种方式极大地限制了对人机交互的设计,其结果带有很大的风险性。因为在最后阶段再修改功能核心的设计代价巨大,牺牲人机交互界面便是唯一的出路。这种带有猜测性和赌博性的开发几乎难以获得令人满意的用户体验。至于客户服务,从广义上说也是用户体验的一部分,因为它是同产品自身的设计分不开的。客户服务更多地是对人员素质的要求,而难以改变已经完成并投入市场的产品。但是一个好的设计可以减少用户对客户服务的需要,从而减少公司在客户服务方面的投入,也可以降低由于客户服务质量引发用户流失的概率。

现在流行的设计过程注重以用户为中心。用户体验的概念从开发的最早期就开始进入整个流程,并贯穿始终。其目的就是保证:

对用户体验有正确的预估。

认识用户的真实期望和目的。

在功能核心还能够以低廉成本加以修改的时候对设计进行修正。

保证功能核心同人机界面之间的协调工作,减少Bug。

在具体的实施上,就包括了早期的Focus Group(焦点小组)、Contextual Interview(环境考证)和开发过程中的多次Usability Study(可用性实验),以及后期的User Test(用户测试)。

在“设计→测试→修改”这个反复循环的开发流程中,可用性实验为何时离开该循环提供了可量化的指标。

所以,要让我们的开发进入RIA的轨道,先要对用户体验这个概念有足够的重视和理解才行。

1.6 题外话二:转换思维模式

很多人都觉得RIA很神秘。比如一个传统的程序员,怎样才能进入RIA的开发领域?是否要经历一个痛苦的技术转型才能做RIA?

答案是,技术不是最重要的,重要的是转换思维。

首先,要跟上RIA的脚步,不能只关注技术,停留在软件“可以使用”的层面,而要理解用户体验,努力改善软件的用户体验。

其次,改善软件开发过程,将软件的交互放在比较重要的位置。

第三,RIA的基础技术反而都是一些已有的、相对成熟的技术,所以不要从技术的角度去担心学习成本,转换思维模式最重要。

最后,欢迎你进入AIR的世界☺。

[

11

]