刘树明 邱元阳 刘宗凡
在网络开发方面,各种技术甚嚣尘上,构成了丰富的网络应用,令我们目不暇接。亲兄弟Flex与Flash各有什么特长?在RIA开发中,Flex与Silverlight、JavaFX谁胜谁负?Flex与AJAX谁优谁劣?Flex与HTML5谁前景光明?Flex开发平台如何发展?下面请听主持人和各位嘉宾娓娓道来。
Flex与Flash
刘树明:Flash技术曾经掀起过一阵应用潮流。在网页制作方面,它大量代替GIF动画、多媒体动画MTV,教师经常用到的多媒体课件制作也广泛使用Flash技术。作为矢量动画的杰出代表,Flash在同样的甚至是更优的画面效果下能够做到作品的体积更小。
作为网页制作三剑客之一,Flash的知名度远超Flex。我第一次接触Flex应该是在2006年,一位同事在56网上看到一个比较好的视频,想要将它下载下来用在自己的课件里面。我下载下来后惊奇地发现,得到的palyer.swf仅仅是一个播放器,并不是当时常见的Flash MTV影片。这就是Flex的一个应用。
邱元阳:从最终效果上看,Flex与Flash似乎是异曲同工,因而容易让人以为它们两者可以互相代替。实际上,它们在功能和作用上的关系并不是表面上看来这么简单的。
如果简单地说,Flex是面向开发者(Developers)的工具,有很多的组件和框架可以应用,可以开发企业级的网络应用;而Flash是面向设计者(Designer)的工具,主要做动画和小程序。两者既有交集,也可以互相配合。
Flash也可以完全使用ActionScript脚本语言来写成独立的程序文件,即脚本文件或类文件;Flxe则常常是以脚本的形式写在.mxml文件中。
从开发者的角度看,Flex是Macromedia发布的Presentation Server(展现服务),它是Java Web Container或者.net Server的一个应用,根据.mxml文件(纯粹的xml描述文件)和ActionScript产生相应的.swf文件,传送到客户端,由客户端的Flash Player或者Shockwave Player解释执行,给用户以丰富的体验。
Flash适合单兵作战,对程序员的要求比较低,在独立程序和小的项目上,运用Flash是完全可以做到Flex的效果的,但它的时间轴和写程序的方式与开发人员格格不入。Flex主要面向专业程序员团队开发,专业性较高,适合一些大型项目的开发,如大型无客户端(网页式)的Flash网络游戏,因为这样的项目一般都是多人开发,而且具有合理的结构性,便于后续修改。
刘宗凡:Flash适合强交互、强效果、少数据展示、少图文混排、偏展示/工具属性的应用程序。例如,Flash交互广告展示、页游(Flash Game)等。而Flex适合较强交互、适当效果、多数据展示、少图文混排、偏工具属性的应用程序。例如,图片在线修改、企业内部系统、ERP系统、金融系统等。
Flex一般只用于开发程序部分,需要程序员和美工协同工作。而在Flash的项目中,这些一般都没有分工。
从表现形式来看,Flash和Flex区别不大,但是它们的数据来源不相同。Flash需要展示的数据是直接嵌入到作品里面的;Flex的数据来源于后台服务器,这点有点类似于普通的照相机和一次性照相机的工作方式。
Flex与RIA
刘树明:Flex作为RIA应用的突出代表,无需刷新网页便可自动通过后台多次重复连接服务器进行交换数据,给用户带来良好的使用体验。请两位老师给大家谈谈关于Flex和RIA的各种有关知识。
邱元阳:RIA(Rich Internet Application)即富互联网应用。RIA首先应该是一个网络应用程序,其次它还要具有桌面应用程序的特征和功能。RIA应用既能在浏览器上运行,又能保持程序原来的功能和特征(富互联网客户端应用)。
在企业应用由Intranet转向Internet时,就不再满足于简单的表单和表格界面,而越来越倡导用户体验,于是RIA的需求应运而生。
无论是B2B网站中的产品展示,还是SNS网站上的交友游戏,无论是娱乐网站上的Web游戏,还是教育网站上的交互设计,RIA技术都已在散发着炫目的光辉和迷人的魅力,给我们带来无与伦比的用户体验。
刘宗凡:在RIA的开发应用中,Adobe公司的Flex、微软公司的Silverlight和Java阵营的JavaFX三足鼎立。Flash由于Flex SDK的支撑,很早就从单纯的动画展示转入RIA领域,而且由于Flash的普及(Flash播放器是下载次数最多的独立软件),Flex目前应该是三大技术体系中市场份额最大、应用最广泛的技术;Silverlight是微软推出的跨浏览器和跨平台的插件,能在微软的.NET上交付炫目的多媒体体验和有丰富交互功能的Web应用,已经对Flex有了很大的冲击;JavaFX是未被收购前的Sun公司在2007年推出的用来对抗Flex和Silverlight的桌面应用。JavaFX Script可以让用户利用JRE“一次编写,处处运行”的优势,在现有知识的技术上创建跨设备的应用;Flex产品能帮助应用程序开发者利用强大的Flash运行时创建数据驱动的RIA,而且开发者还可以用Flash和Flex构建器一起为基于Flex的应用增加富交互元素。
目前来看,这三种技术各有优势,Flex先入为主,目前已经有了一个很大的市场,但是Silverlight的先天优势是有Windows平台的支持,而JavaFX作为后起之秀,尽管目前应用不是很广泛,但其优势是它的开源策略,相信前景依然非常广阔。
Flex与AJAX
刘树明:我们知道,AJAX也是一种免刷新整个页面而获得服务器端更新数据的技术,它主要是采用JavaScript的XMLHttpRequest对象来直接与服务器进行通信。通过这个对象,JavaScript可在不重载页面的情况与Web服务器交换数据。那么AJAX与Flex各有些什么优缺点呢?
刘宗凡:AJAX(Asynchronous JavaScript And XML,异步JavaScript及XML)是一种用于创建更好、更快以及交互性更强的Web应用程序的技术。与Flex类似,它也是需要客户端支持的一种技术,但它不需要一个专门的播放器,只需要客户端浏览器的JavaScript支持。JavaScript、XML、HTML、CSS在AJAX中使用的Web标准已被良好定义,并被所有的主流浏览器支持。AJAX应用程序独立于浏览器和平台,桌面应用程序有诸多优势,它们能够涉及广大的用户,更易安装及维护,也更易开发。为了正确地浏览AJAX应用,CSS是AJAX开发人员所需要的一种重要武器。CSS提供了从内容中分离应用样式和设计的机制。虽然CSS在AJAX应用中扮演至关重要的角色,但它也是构建跨浏览器应用的一大阻碍,因为不同的浏览器厂商支持各种不同的CSS级别。
AJAX的优点是它不需要任何浏览器插件,而且它的应用范围也不会局限于像Flex这样的播放器窗口,页面上的所有div元素都可以接受AJAX从服务器上拉取的数据。但是它需要用户允许JavaScript在浏览器上执行,而且需要考虑各种浏览器的兼容性,就像DHTML应用程序那样,AJAX应用程序必须在众多不同的浏览器和平台上经过严格的测试。
邱元阳:随着AJAX的成熟,一些简化AJAX使用方法的程序库也相继问世。最为典型的是雅虎的YUI(Yahoo! UI Library)。YUI是一个开放源代码的JavaScript函数库,为了能建立一个高度互动的网页,它采用了AJAX、DHTML和DOM等技术,也包含了许多CSS资源。它使用授权为BSD许可证。通过YUI函数库,我们可以很轻松地实现动画、连线工具、资料源、元素、DOM、即拖即放、事件响应等类似桌面应用程序的一些操作,同时它还提供自动完成、按钮、月历、容器、资料表、记录器、表单、滑块、分页视图、树状检视等控件,并提供七种基本线框外带附加组件,支援超过1000种不同网页布局。
大量的AJAX应用,会给客户端的浏览器带来比较大的负荷,而且因为要考虑到各种浏览器的兼容性要求,Web应用开发商通常需要花好几倍的人力成本来协调浏览器兼容。这就是为什么澳大利亚电子产品经销商Kogan,对于在他的网站上使用IE7以下版本的浏览器购物者多收取6.8%的款项的重要原因了。
刘树明:相对于Flex来说,AJAX确实是有优点也有缺点。不过现在使用YUI的站点也越来越多了,Moodle从2.0版本起,就在它的各种组件中大量应用了YUI的技术。JavaScript对于牛人来说,可以写出非常牛的程序。一个法国程序员Fabrice Bellard曾经就用纯JavaScript写出了一个在Web上面运行的Linux系统,不但能模拟PC机的CPU、内存,连C语言编译器等系统软件都一应俱全。但是对于普通的程序员来说,也许Flex技术是更好的选择。
Flex与HTML5
刘树明:尽管Flex功能非常强大,而且目前暂时应用比较广,但是它毕竟还是需要相关播放器组件的支持。随着HTML5技术的产生,Flex技术是否会面临淘汰的危险呢?
邱元阳:作为新兴的Web技术,HTML5走上了风口浪尖,为众人所景仰。
HTML5已经成为一种趋势,在它的胁迫下,浏览器的包容性越来越大。也许有一天,我们的浏览器不需要再安装Activex,不需要Flash Player支持,不需要下载Applet、Silverlight等任何插件,而所有的动画和交互效果都能实现了。这个希望就可能寄托在HTML5和CSS3身上。
尽管HTML5和CSS3来势汹汹,但是因为Flash有着广泛而根深蒂固的应用基础,Flex仍然大有可为。如果AJAX技术和Flex技术配合形成前端组件体系,将大大提高开发效率,改进用户体验。
Flex的核心价值在表现层,它有着基于组件的表现层快速开发模式。可以说,Flex在表现层的作用暂时无可替代。一个是Web应用,一个是B/S架构,两者在功能和作用上并没有可以完全替代的关系。而且,连Adobe都在积极推动HTML5,它也未必会造成Flex和Flash的消亡。
刘宗凡:HTML5和CSS3适合较强交互、适当效果、多数据展示、多图文混排、偏应用属性的应用程序。例如,Google系网站、各种传统意义的网站、SNS系网站等,在手机等移动终端Web网络应用方面也得到了普遍应用。
但是在PC机的RIA应用方面,Flex现在并不过时。首先,Flex所需的Flash播放器在PC机上非常普及,采用Flex技术的Web应用几乎不存在使用障碍;其次,在一些比较流行的应用技术上,Flex积累了很多的开源项目,开发人员在面临架构一个新项目的时候,如果他们采用Flex技术实现,可以在现有的开源项目的基础上轻易完成,节省大量的人力物力。所以在相当的一段时间内,我觉得Flex技术还是会有很广阔的应用空间。但是HTML5这种新技术走向前台是难以阻挡的,未来可能是相当一段时间内,会呈现以Flex为代表的RIA技术和HTML5技术并存的局面。
开发平台与技术
刘树明:随着人力成本占项目开发总成本的比例越来越大,开发平台和开发技术的选择对于项目开发和项目管理越来越重要了,相比其他的RIA技术,Flex在开发方面有什么特点呢?
刘宗凡:Flash主要基于Flex SDK进行开发,这是一个可视化开发界面,可以通过拖拽方式开发,提高开发效率。
Silverlight主要的开发平台是微软的.NET平台。近年来,微软貌似对这项技术非常重视,投入很多的人力物力,使Silverlight不但从Silverlight 1到Silverlight 5更新速度很快,.NET平台也更新换代非常快,功能越来越先进。Visual Studio 2010中新增了更为强大的Silverlight开发功能,包括了可完整编辑的设计接口、拖放式数据系结、自动绑定控件、数据源选择、与Expression Blend样式资源整合、Silverlight项目支持和完整的IntelliSense。
JavaFX的集成开发环境类似于J2EE,使用得比较多的是Netbeans和Eclipse,在这些集成环境下面,程序员也可以使用和VB或Delphi非常相像的可视化编辑器。
在过去几年中,Flex/ActionScript社区创建了大量开源的开发支持工具:
RIATest是面向Flex的GUI自动化测试工具,它支持Windows以及Max OS X。
Flexcover是面向Flex、AIR以及ActionScript 3的开源代码覆盖率检测工具。
Alcon是轻量级的调试工具,支持ActionScript3、Flex及AIR开发。
Fluint(Flex unit and integration的简称)是面向Flex 2/3应用的测试框架。
Arthropod是面向Flex和AIR开发的调试工具,凭借Arthropod,开发者可以在运行期轻松调试应用。
De MonsterDebugger是面向Adobe Flash、Flex及AIR项目的开源、轻量级但功能完善的调试器,它完全使用Adobe AIR开发。
ASTUce是衰退测试框架,其灵感来源于xUnit架构,如JUnit。它支持对ActionScript 3的单元测试。
AsUnit是面向ActionScript 3的开源的单元测试框架。AsUnit 2.x已经完全集成了Flash IDE。
FlexMonkey是面向Flex应用的测试框架,它可以对Flex UI功能进行捕获、重放以及确认,可以记录并回放Flex UI的交互并生成ActionScript测试脚本,这些脚本可以轻松集成到持续集成过程中。
邱元阳:Flex开发过程通常使用已经含有Flex 4 SDK的Adobe Flash Builder,Flash Builder环境下所有的Flex开发都基于Flex SDK框架,该框架为你提供可重复使用、可扩展的UI组件、数据获取服务和事件处理模块等。它包含对智能编码、调试及可视设计的支持,提供功能强大的测试工具,这些工具可以提高开发速度并创建出性能更高的应用程序。
Flex还有一些应用框架可以提高编程生产率及改善产品质量,2008年推出的一些Flex/ActionScript框架对于Flex使用率的提升功不可没。他们是Cairngorm、PureMVC、Model-Glue:Flex、Foundry、Guasax Flex Framework、ARP、Flest Framework、EasyMVC以及Adobe FAST。从那以后涌现出了越来越多的框架,这些框架丰富了Flex开发生态圈:
Ruboss这个Flex框架集成了Ruby on Rails和Merb。它还有一个RESTful接口以与Adobe AIR的嵌入式SQLite数据库进行通信。Ruboss框架与Rails和Merb应用的关系就好像是Adobe LiveCycle Data Services ES与J2EE应用的关系一样。
Mate Flex框架发布于2008年,其目的是简化事件驱动的Flex应用开发。Swiz是面向Flex的IoC框架。它并没有太多的强制要求,如目录结构或是样板代码等,这一点与其他框架如JEE大不相同.Prana是又一个面向ActionScript的IoC框架,它基于Spring框架的XML方式进行开发。
JumpShip是个ActionScript MVC框架,包含了标准的数据模型以进行自动化的数据分类、枚举以及搜索。它反对在框架中使用单例模式,而单例模式在现代的软件框架中得到了广泛的应用。
GAIA是面向Adobe Flash的前端ActionScript框架,支持Flex Builder.Razor是个ActionScript组件框架,对常用的Flex组件提供了另一种选择.Flight Framework是又一个ActionScript框架,支持MVC及其他设计模式。
刘树明:从本质上来说Flex仍是客户端技术。利用Flex技术,还可以构建RIA电子商务网站,实现HTTP的断点续传,Web方式下的在线音视频,Web方式下的图形化拖拽操作和动态图表等。目前也有基于Flex技术的网络硬盘,甚至能实现仿真实验网络平台。国内外的一些大型的网站,如Slideshare、Youtube、豆丁、优酷等,在知识管理的核心技术上都采用了Flex。也有一些网站的应用并不是采用单一技术,而是采用多种技术的组合,如WEBQQ,其客户端主要是采用AJAX,服务器端通讯的接口又是采用Flex(也许是因为需要加密数据接口的用意)。随着技术的发展,更先进的技术可能会替代类似Flex的RIA技术,也可能是与之长期并存。