Flash 与 Flex 路在何方?

  • Abel Avram
  • 张龙

2011 年 9 月 12 日

话题:Java.NETRubyWeb框架JavaScriptHTML5语言 & 开发

Adobe 想要强化 Flash 与 Flex 在企业,特别是在移动领域中的地位。但最近的一项调研表明 jQuery 已经超越了 Flash,成为前 17,000 个网站首选的 Web 部署解决方案。

近日,来自 Adobe Systems 开发工具事业部的产品经理 Andrew Shorten 在 Adobe 的官方博客上发表了一篇博文,谈到了 Flash 与 Flex 的当前状态,并就 Adobe 的旗舰平台给出了自己的一些看法。Shorten 承认虽然 Flash 曾是跨平台 Web 开发的唯一解决方案,但现在 HTML5 的发展势头越来越好,也表现出了极强的吸引力:

过去有无数的例子表明 Flex 是富用户体验的唯一解决方案。但现在,很多应用已经开始使用 HTML5 相关的技术并通过浏览器交付。在 Adobe,我们也向设计者与开发者提供工具来实现这些体验——Edge 与 Muse 就是佐证。

就 HTML5 以及相关的工具(Edge 与 Muse)来说,Shorten 认为 HTML5 并不是“万灵丹”,企业出于”性能、框架成熟度以及健壮的工具“等原因仍会选择使用 Flex。Shorten 继续谈到了 Flex 与 Flash 的主要发展方向,即面向企业与移动,特别是后者。他承诺 Flash 与 Flex 会成为企业业务应用的运行时与开发环境:

我们将会继续加大对 Flex 在企业级应用中的投资力度,确保开发者可以交付富于表现力、健壮的应用。由于我们会提供未来发布版本的更详尽的信息,因此大家将会看到我们的承诺来解决很多领域的问题,如 Spark 组件的实现、可访问性、构建系统集成、性能分析工具以及下一代编译器的集成,这些举措会保证 Flex 成为企业级 RIA 应用的首选。

关于移动开发的未来,Shorten 提到:

我们将会继续关注运行时性能、原生扩展、新的组件、声明式皮肤等,并添加更多的平台以及改进工具工作流,这样在下一个主版本发布之际,我们期望大多数应用都可以使用 Flex 进行开发,而完全的原生应用的需求则会降到最低点。

Shorten 对此并未透露太多,只是说在 10 月 1 日至 4 日于洛杉矶举办的Adobe MAX大会上对此将会有详尽的介绍。

我不清楚 Shorten 为何会发表这样一篇关于 Flash 与 Flex 路线图的博文,不过这可能与前一天appendTo, LLC发布的关于全球前 17,000 个站点的分析报告有关,这个报告的结果可以概括为:在全球的流行站点中,jQuery 已经超越了 Flash。appendTo 是个提供基于 HTML5 与 jQuery 咨询、培训与开发的公司。根据报告所述,全世界流行站点中的 48% 已经在使用 jQuery 进行部署,47% 则使用 Flash。该分析基于HTTP Archive所提供的数据,后者则是一个搜集 Internet 数据的组织。appendTo 的 CEO 及联合创建者 Mike Hostetler 说到:

这些数据表明了这两年的一个发展趋势。越来越多的网站开发者选择了 jQuery 与 JavaScript 而非 Flash,而这种转换速度则有愈演愈烈之势。

作为曾经的网站之王,Flash 已经开始不断失守,其地盘不断被 HTML5 与 JavaScript 等 Web 技术所蚕食。这个势头还会继续下去么?众多公司是会因为成熟度的原因继续选择 Flex 还是会等待 HTML5 工具成熟起来呢?HTML5 是否会统治 Web 开发呢?只有时间能告诉我们答案,但现在我们可以根据已有的经验猜测一二。

此文一经发布,即在 InfoQ 英文站引来了众多读者的回应,现摘录几篇评论以飨各位:

读者 Dean Schulze 说到:

Adobe 对 Flex 的处理方式非常差劲。他们到现在为止也没有提供具备商业质量的 Eclipse 插件来帮助开发者构建 Flex 应用。哦,他们对插件收费,但这个插件却是 Eclipse 世界中最差劲的商业插件了。

Adobe 花了好多年才发布新版本的 Flex。

由于 Adobe 的质量一直以来都不咋样,因此除非 Adobe 的文化发生了变化,否则就别指望 Flex 能有啥出息了。

现在 HTML5 标准尚未最终确定,但 HTML5 却已经超越了 Flex,从这个事实就能看出 Adobe 对 Flex 的管理方式有多差劲了。

读者 Clinton Begin 说到:

Flex 已经玩完了。主要原因是它几乎没能提供什么东西,用户体验也变得越来越糟。如果说 Flex 对于开发者来说还不错的话,那么对于用户来说就太差劲了。此外,Adobe 把 Flex 4 搞砸了,Flex 3.5 要更简单,更整洁一些。主要原因在于他们之间的互操作实在是太可怕了,Spark 并没有完全取代 Halo。恶心啊,恶心。我真后悔在两个重要项目中使用了 Flex。Flex 完蛋了。

Flash 的未来要更加光明,Adobe 可以通过多种手段保持 Flash 的统治地位。即便人们讨厌 player 插件,但 Adobe 可以通过 JavaScript 对 VM 进行移植(有一些开发者可以证实这一概念),他们也可以在编译器级别上解决这一问题,将 AS3 和 FLA 文件编译为原生的 JavaScript(其他一些平台已经做到了这一点)。即便他们依旧采用插件方式,他们也依旧可以统治 Web,因为微软、Google 和 Mozilla 与 Adobe 之间保持了良好的关系。

然而,Flash 的使用场景将会发生变化。也许优秀的 Flash 开发者会承认很多站点都在滥用 Flash(请看看那些汽车制造商的网站吧)。在现在这个年头,网站和广告条不应该再使用 Flash 了。或许过去这么干是必要的,但现在早已物是人非了。对了,还有视频。只要浏览器能好好地播放,我才不在乎是 Flash,还是 H.264,或是 Ogg 呢。作为最终用户,我不管那么多。

到现在为止,Flash 最擅长的领域还是游戏和其他交互式媒体等领域。Flash Player、框架、库、AS3 语言和工具大大超出了 HTML5 所能提供的,他们之间有至少 10 年的差距。你试着在各种浏览器和设备上使用 HTML5 来播放音频,看看结果如何。

你可以通过比 JavaScript 更好的语言和一些基于矢量的创建工具实现这种效果,然后将其编译为 JavaScript 与 HTML5 Canvas,但 Adobe 在这方面领先很多,至少有 10 年的优势——更不必说了解这些工具的开发者与设计师的网络效应了。Adobe 所需的就是全新的编译器或是 VM(抑或两者兼而有之)。其他人则要从头开始。

因此我的设想是:Flash 将会越来越好,或许使用不同的运行时。Flex 将会死掉。HTML5 将会统治除了游戏之外的其他领域。移动将会依赖于原生代码以谋求最佳的体验(Java 之于 Android,Objective-C 之于 iOS)。

此外,像 Unity 之类的工具 / 框架是非常有趣的,但最终他们将会变成像 Flash 一样的插件或是像 Java 一样的跨平台语言(下面是 Mono)。因此他们还需要不断努力才行。

读者 Andreas Tasoulas 说到:

能够指出 Flex 与 Flash 之间的差别,这很好。我完全同意你关于 Flex 与 Flash 未来的观点。然而,文章中将 Flex 与 Flash 的处境混为一谈的做法是有误导嫌疑的,做调研的公司说 jQuery 超越了 Flash 是有些偏颇的(用他们自己的话来说就是他们是关于 jQuery 的培训、咨询公司),这影响到了最后的结果。

读者 Alex TicToC 说到:

Web 上使用的 jQuery 比 Flash/Flex 多根本不是什么事儿,要是事实不是这样我反而觉得不正常呢。Flash/Flex 不应该用于显示基本信息或是作为大多数简单网站的技术选型,甚至是电商网站。那些饭店的网站使用了 Flash,最后只不过是显示菜单,然后通过 PDF 下载,这正是对 Flash 的滥用。

HTML5/JS 是个可怕的技术,它可以用于交付企业应用。目前,大多数网站都不是”企业应用“,这个结果不错。语言、工具、浏览器差异性与怪癖、编写程序 /OOP 的开发者之间的层次(Google 可能没有这个问题)都是前进路上的障碍。现在总有人通过一些手段来提供一些工具:我看到在线版的纯 JS PhotoShop,还不赖。但这并不能说明什么。一群聪明的家伙可以创造出很不错的技术(我想到了 PHP)。我还看到有人使用汇编编写出了非常棒的游戏,很有表现力,但这并不是说汇编就是游戏开发的技术选型。

现在说 Flex 已死还为时尚早,但我自己也想过 Flex 的未来,几乎每天都想。

如果你想要开发一个富客户端、跨浏览器 /OS 的应用,那么 Flex 依旧是正确的选择,虽说要付出更多的努力(需要 Flex 专家)。

Flex 有很多问题,有很多遗留下来的代码,堆砌的特性、糟糕的设计决策、甚至有时代码质量也很差(我就见过太多了)。但一言以蔽之,Flex 是个框架,它以性能为代价提供了很多特性(你不能去掉大多数特性),除非你是个性能专家,并且洞察 Flex 的原理,在这种情况下才会保证性能。如果你在配置不错的桌面机上运行 Flex 还好。毋庸置疑,Flex 在移动设备上的表现不尽如人意。

这几年来,Adobe 做过的最糟糕的决策就是重用现有的 Flex 代码基,然后对其进行一些调整就运行在移动设备上了。笨重的皮肤架构、样式系统对 CPU 的消耗、优化失效 / 验证代码(意指空转运行,因为 SDK 开发者有时会调用 invalidate(),并不是所有新特性都会用上)在移动设备上的表现并不好。另一方面,纯 Flash 应用则在移动设备上运转良好!这只不过是膨胀的 Flex/AIR SDK 导致的性能问题。Flash Player 变得越来越好,这都要归功于如 Thibault Imbert 之类的富有激情的人们。AS3 语言则有一些提升。另外,Flex SDK 变得越来越臃肿,其架构也没有什么变化(我上一次听说 Flex 5 将会对框架进行彻底的整理。在 2011/2012 之际,你可以期望 Flex SDK 将会演变为基于插件的平台,而不是像意大利面条一样,充满了大量的单例、静态、过程式代码,这些东西都是 6 年的老古董了)。

在查看 Flex SDK 的代码时,我常常觉得这是一个基于社区的项目而不是一个真正成熟的面向企业的产品;有几个 Flex 的领导 / 架构师是非常不错的,但大多数都不咋地。对基本的 OO 原则的违背比比皆是,有时都达到了无法接受的程度(复杂的类继承中,父类竟然完成了子类该做的具体事情)。即便是一些基本的概念,如私有方法的代码行数不要超过 500 行这种事情也会经常遇到。

千万别让我用 Flash Builder。

虽然有这么多问题,但实际上 Adobe 并没有真正的对手,我想这种情况会使得 Flex 成为赢家。

读者 Russell Leggett 说到:

我觉得”现在“这个词儿是很适合的,这取决于开发者的受众,但确实没有太多的时间了。我曾使用 Flex 开发过一个大型的贷款发放系统,但 4 年前我们却转向了 html/js,因为我们觉得采用 html/js 能够更简洁地实现我们的目标(当然了,还有其他一些原因)。我们之所以这么做是因为我曾经写过框架的重要代码。我们所实现的感觉并不好,但实际效果还不错,这个经验告诉我们可以通过 html/css/js 实现与 Flex 一样的应用。

我们现在使用了声明式 UI 和数据绑定,就像 MXML 一样(甚至比它更好),可以通过 JSON、REST 和代码生成实现与 Java 后端的无缝集成。它拥有一个相当强大的构建系统,可以完成依赖分析,并能自动创建延迟加载代码模块,这样就可以将成千上万行 JavaScript 代码划分到多个文件中,并且根据需要进行加载。在开发过程中,我可以在页面刷新时快速重新编译客户端代码。

UI 与 html/css/js 一样灵活,并且现有的第三方组件可以轻松集成进来,同时能够很轻松地编写自定义组件来得到框架数据绑定的优势。

虽然我所开发的框架没法展示出来,但我看到社区中很多人已经开始采取类似的方式开发框架了。有些框架非常轻量级,如 backbone.js,有些则稍微重量级一些,如 Sproutcore。虽说工具、文档及解决方案并不一定适合于企业业务,但浏览器与语言却没问题。我们只需从背后的公司获得一些反馈即可,如微软,它正在大力推进 HTML5。甚至连 Adobe 都开发出了 HTML5 工具。

查看英文原文:What is the Future of Flash and Flex?

Java.NETRubyWeb框架JavaScriptHTML5语言 & 开发