关于 Flex:毁了 Flash 的,或许就是 Flex

原文:http://blog.swfdong.org/2010/08/thinking-on-flex/

以下内容仅为个人观点,欢迎讨论,谢绝谩骂。

说起来,小东应当算是比较特别的一个 Flash 开发者,至少目前还是。

第一,我不用靠 Flash 开发吃饭,但又足够热爱 Flash,这使我可以跳出“生活所迫”的无奈境地来看整件事情;
第二,我从不靠 Flex 开发,因为我不大喜欢这项技术。

今天想说的是 Flex,也可能用“骂”更恰当,因为我认为这项技术阻碍了 Flash 未来的发展,而我本身是十分热爱 Flash 技术的。

事情的一开始,无论是 Macromedia 还是 Adobe,都对 ActionScript、对 FlashPlayer 的效率过于自信了。

就在这样的盲目自信下,Flex 勉为其难的诞生了,目的在于拉近 Flash 与传统程序员的距离,却逐渐让 Flash 技术偏离了其原本的轨道。

最开始的 Flash,是设计师的工具,用来实现更独特、更新颖的互联网交互体验。而我认为,RIA 一词,也正是为向着这个目标更进一步而提出的。可悲的是,现在很多人一提到 RIA 开发,就将其与 Flex 联系起来,事实上,Flex 技术与 RIA 的精髓是背道而驰的。

首先,RIA 的全称是 Rich Internet Application,简体中文译名是富网络应用程序,这其中的精髓就在于“富”字。此富非彼富,富的是交互体验,而非文件体积。可惜 Flex 的代码体积较大,影响网络传播时的加载速度(当然,RSL 的应用使得这一问题得到了一定程度上的解决),框架庞大,影响运行时的效率(虽说做了这样那样的优化,渲染效率上已能说得过去,但内存的占用却还是硬伤)。

在客户端呈现时有这么多的问题,如果在开发时能够节省时间,充分表达设计者的意图,也是可以容忍的。可惜 Flex 为了讨好传统开发者,过于强调界面和代码的分离,偏偏很多有趣的交互体验往往是代码与界面结合,原本一个时间轴动画能实现的效果现在却要上百行代码代替,这样等比折算,也难怪写代码没有做动画赚钱了。

圈中牛人很多,按照对传统程序员能力的评定,我能够上牛人行列的尾巴就已经算攀高了。但有些心里话还是不得不说:

首先,现阶段的 Flex 技术 90% 没有用,照顾了传统程序员的胃口却无法满足用户的胃口,这样的技术,只能外表光鲜的稍微降低一下我国待就业大学生数量。

为什么 Flex 没有用?因为体验与桌面端没有任何改变,CheckBox、RadioBox、PushButton、ScrollBar、DataGird,苹果 iOS 展示给世人多种新的交互方式,简洁有效,我们的网络应用、桌面应用却还局限在这些上个世纪的交互产物。好吧,你会说用户已经习惯了,不愿意改变自己的操作习惯,如果世人真如我们所想的这般专一,这个世界就太无趣了。用户不愿意改变操作习惯,只能说明两点:一、你的产品没有足够的吸引力;二、新的操作方式太过蹩脚。

举例来说,盛大网络做的三国杀 Online,不知道是哪位高手开发的,在功能上甚至比客户端版还先进,当时看到时实在是眼前一亮,立马添加到收藏夹,心说以后再也不用开 VMWare 上 XP 玩三国杀了,可惜试了三台 Mac,只有在 i7 的 MacBookPro 上跑得还算理想,其他两台配置也还不低的 Mac 上往往从出牌阶段直接卡到弃牌阶段。几次不愉快之后,为了不再增加逃跑率,我只得继续选择开虚拟机玩三国杀这条累死累活的不归路。总听有人说 Mac 上的 FlashPlayer 效率不理想,是的,我也这么认为,可如果玩个卡牌游戏还要“卡”,那岂不真是特别的不理想了?

有人会辩护,说可以使用 ActionScript 自己为 Flex 的交互体验润色。我只能回答说:那太可怕了,就好比要我给斑马刷上豹纹一样可怕。对于侧重交互的应用,对 Flex 框架进行改造还不如自己写来得快。

所以我对牛人们所挂在嘴边的架构很不感冒,虽然自己写代码时也会与大家讨论架构,但第一位总归应是运算性能和显示效果,毕竟再漂亮的骷髅也只是个白骨精。这样想想,我不再关注 Flash 圈的那几年,一方面是因为忙其他事情,另一方面就是因为论坛中关于 pureMVC、Flex 框架等问题的讨论越来越多,让我着实头疼。

这两年情况看起来是好转了,自打网页游戏火了以后,不少公司和个人意识到 Flex 框架的效率无法满足网页游戏的需要,选择了自行开发 UI 框架、自行编写。可惜他们大多不是清楚了自己要做什么,只是做着做着发现 Flex 无法做到而已。

至于用 Flex 开发企业级应用这顶冠冕堂皇的高帽子,只能说不是完全没有市场。但应该不会对大型企业和小型企业的胃口,中型企业中也只有一部分能够消化。

苹果 iOS 是潜力无限的,因为他既能让创意人员发挥创意,又能让开发人员赚到钱,还能让用户享受到优质的软件。当然,或许未来的 Android 也可以做到。而 Adobe Flash 平台呢?创意人员为越来越讨好开发人员的创作工具(Flash IDE)所困扰,开发人员面对着老掉牙的传统控件和开发方式(Flash Builder),用户还要忍受运行效率等问题(Flash Player)。

Flash 技术的本意在于充分发挥创意,呈现新交互体验,为用户带来乐趣,让用户享受使用应用的过程;而非处理复杂的表单、计算繁琐的数据等。所以在我看来,Flash 技术无论是应用于网页端还是桌面端,其设计都会也都应更接近 iOS/Android 上的应用而非传统桌面应用。可惜的是,Flash 应用无法像 iOS/Android 应用那样为个体或小型群体的开发者带来丰厚的利润(当然,个例不算),这般尴尬处境,归根结底在于其更偏向桌面应用的开发方式。

没错,就是 Flex 惹的祸,Flash 的出身和定位决定了其编程方式的特殊性,即便是纯面向对象编程的方式,也不应过度的将代码与创造性的界面抽离(注:这里说的当然不是 Flex 那种纯代码生成的界面),这种做法在上 Flash 行不通。

可惜又可悲的是,很多 Flash 开发者(也包括曾经的我),总是在想尽办法说明 Flash 不只是做动画的工具,做的应用看起来也更像桌面应用,自己也不是个“臭做动画的”,而是个高尚的“程序员”。现在回想,不是很像某些高雅的“相声艺术家”得势之后的反三俗做法吗?无论是偏向动画,还是偏向程序,用户喜欢是第一位的,用户看三秒就关掉页面了,写个百万行的庞大架构又漂亮给谁看呢?

有人说,你这是在和 Flash 圈内牛人们唱反调。我倒想说,架构做的好、代码写的好的,不一定都是 RIA 方面的牛人,认为我上面这些话就算唱反调的,还一定不是 RIA 方面的牛人。中国写 ActionScript 写得不错的往少了说数以千计,但那只是写代码,很多公司一味的强调分工,使得一些代码好手成天守着个 FlashBuilder 和 Flex 框架,连 RIA 的概念都不曾理解,这不是莫大的悲哀吗?

记得五六年的 Flash 动画,小人跟着 Loading 的进度条跑,那时的新鲜感和兴奋感,再难寻觅了。

记得 Adobe 和 Apple 刚出纷争时,作为 Apple&Adobe 双料忠实用户的我说:“我爱 Flash,我怕他完了,可谁爱我呢?”

放眼这个时代的互联网,当中国都有新浪、腾讯、联通、虾米,CNTV、优酷等这么多大网站为 iPad 做了视频 / 音频的兼容,Flash 又还能抵抗多久?当无数 Flash 小游戏作者发现自己的创意被人搬上 AppStore 赚得荷包满塞的时候,心中是否也会闪过一丝凄凉?

麻球要来占领面向个体开发者的这片高高在上的处女地,很多人仿佛看到了曙光,但既然是球,终究是滚着来的,如果没停好,还得滚开。

祝福吧,祝麻球能够创出惊人的业绩,为 Flash 开发者带来实实在在的福利,也为 Flash 应用的去 Flex 化多做一些贡献。或许有空的时候,我也会做一两个小游戏,上传上去,找一找当年的激情。

也请不要再问我喜不喜欢 Flex,逼急了我就捅出那句黄教主的名言:

闹太套。


补充 (by civet)

其实我 之前 也提过,Flex 这个名字本身就带坏头了。好多人都对这名字没什么概念,这里再强调一下

以后我凡是提到 Flex,都特指 Flex Framework,而不是 FlexBuilder

我喜欢用 FlashBuilder(FlexBuilder),而且一直在用,但是我不喜欢用 Flex Framework 开发

不是因为不喜欢 MXML,而是因为我压根就觉得官方这个框架做得不好,况且不是所有项目都适合用。