RIA是macromedia在2004年提出的术语。简单来说,RIA就是网络上的应用程序,它同时具有web应用的特点和 desktop应用的特点。作为web应用程序,它是跨平台的、无须额外配置的、无处不在的;作为desktop应用程序,它是实时反应的、具有丰富交互操作的。RIA的架构也很简单,即:表示层-服务器-数据库,通常表示层是浏览器或其他支持http协议的应用程序,服务器则可以是任何其他C/S或B /S的使用的企业级应用服务器,数据库自然是任意的了。
RIA的存在为广大的web用户带来了全新的体验。这些体验主要体现在界面的内容上,使得大量的界面控件和数据能够紧密联系,更可以方便的整合音频、视频等媒体元素。不同于传统的web应用,RIA采用异步传输模式和服务器通信,这是一种比较安全的、具有更强适应性的服务器运行模式,在传输发生时用户可以继续做其他操作而无须等待刷新,另一方面,由于传输是局部的,只考虑发生变化的部分,因此大大减少了网络流量。
目前比较流行的RIA坚决方案主要有Flex、Ajax、JavaFX、Silverlight、Openlaszlo。本板块主要关注基于Flex的解决方案。
以上解决方案都依赖于浏览器级相关的插件,另外一个则是给予独立Flashplayer的解决方案AIR(Adobe
Integrated Runtime),它将web应用搬到了浏览器之外,同样没有C/S笨重、部署不容易的特点,用户所做的只是下载一个air并安装即可。AIR不再本板块讨论的范围,感兴趣的朋友可以自己去www.adobe.com查看相关资料。
2.Flex
Flex最初由macromedia(后来于Adobe合并)在2004年推出,意在为提供一个企业级的RIA解决方案。简单来说Flex是一个应用框架,最终以swf的形式将应用程序嵌入到web浏览器里,再通过一些企业级的解决方案来与后台应用服务器通信。实际上,跟Ajax一样,Flex也是一个老技术新思想的应用框架。其核心是ActionsScript和XML,以及在此基础上的整套SDK。和Ajax基于网页不同的是,Flex基于窗体。
目前,Flex已经正式开源,并且能在Microsoft Windows, Linux和Apple Mac OS X平台正常工作。对于普通用户,只需拥有带FlashPlayer的web浏览器即可。对于Flex Applicaion的开发只需下载其免费的SDK即可,当然Adobe也推出了其官方开发工具FlexBuilder——一个基于Eclipse的商业开发工具——同时具有独立版和插件版(Windows版和MacOSX版具有可视化的设计工具,Linux版现在还没有)。
3.Flex与Flash的关系
首先这里想说的是,Flash并非只是一个单纯的矢量动画创作工具,而是一个凭借脚本语言ActionScript在功能和定位上不断演变的网络应用开发工具。早在Flash MX的时候就已经成为macroemdia 推广RIA战略的工具。但是毕竟Flash最初的定位是面向美工的矢量动画创作工具,并不适合传统的开发人员。于是Flex成为开发者们的{sx}。
Flex和Flash都以ActionScript作为其核心编程语言,并被编译成swf文件运行于Flashplayer虚拟机里。因此Flex也继承了Flash在表示层上先天性的美感、除了视觉上的舒适感外,还天生具备方便的矢量图形、动画和媒体处理接口。
虽然Flex和Flash有众多的相似点,但是不同之处仍然很多
1.尽管公用ActionScript,但是使用的库并不xx相同,更合适的说法是两者使用着两套具有极大“功能重叠”范围的库。
2.Flash偏向的是美工人员,所以更容易发挥{tx}处理的优势,Flex偏向开发人员,所以容易做出具有丰富交互功能的应用程序。
3.Flash只能以ActionScript脚本的形式开发(舞台被关联到一个称之为document class的类里),另外舞台元素也是可以绑定脚本的,不过从软件工程的角度讲不建议这样用,Flex还可以使用称作mxml的标记语言来描述应用的外观和行为,mxml中可以直接嵌入ActionScript脚本。
4.由于第三点而造成的两者市场定位不同,Flex是面向企业级的网络应用程序,Flash则面向诸如平面动画、广告设计等多媒体展示程序。
5.借助Flash Lite这一移动设备上的Flashplayer,Flash可以开发移动应用,Flex则不行。
6.Flash的编程模型是基于时间轴的,Flex的则是基于窗体,虽然它运行在网页里。
4.ActionScript和其他语言
ActionScript与JavaScript是同门兄弟,都源于ECMAScript规范。但是对于我们使用语言的人而言,这个是透明的。有人说熟悉了JavaScript就能很快熟悉ActionScript,这在以前没有任何疑问,但是事物总是会发展的,ActionScript先后有过两次革命性的发展,这便是ActionScript1.0,ActionScript2.0和ActionScript3.0,没接触过as的朋友请注意,这三个版本的每一个都是一门新的语言。JavaScript的语法却一直没变,还是跟ActionScript1.0类似。
ActionScript的发展经历了面向过程、基于对象、面向对象三个大的方向过程。这使得ActionScript越来越受到Java、C#等开发者的欢迎,ActionScript3.0号称可以与Java等{wz}语言媲美,其实说到底,都是面向对象的语言,原有的思维方式和模式都可以直接用到ActionScript3上来。当然如果不是在AIR环境里,Flex无法直接访问本地系统、文件系统和数据库,这个是它的弱点之一。
不过,ActionScript作为脚本语言,相对于java这样的系统语言还是有所不同的,因为这是ActionScript卖点,“动态语言 ”,即在运行时能够改变对象的结构,这一点于JavaScript是一样的,因此JavaScript思维方式也可以作用于ActionScript。关于动态面向对象语言的优势,有兴趣的朋友可以看看我的《抛砖引玉:ActionScript2扩展图形接口》 一文。
5.后台通信技术
作为企业级解决方案,Flex提供了众多与后台交互的方式:
1.Flash Remoting, ActionScript专用通信接口,使用称之为AMF(Action Message Format)的通信协议,速度比HTTP协议要快。支持多种数据类型,并有针对Java、.Net、ColdFusion、PHP等语言的服务器端 Remoting。
2.FDS(Flex Data Service),一个java企业级部署的war,内置于java通信的库,用户的java web应用可以方便的与其整合。
3.HttpService、WebService、Socket,这三种常见的Web应用接口使得Flex能与任何支持它们的后台方便的通信。