有 3 个原因,让我看到这个问题不得不答:
1. 我曾经从事了 15 年的 Flash 和 HTML 相关工作,我经历过。这是鄙人的亲身经历,1999 年开始接触 Flash 技术,2000 年向 Macromedia 提交了 Flash AS1 的 Math 相关算法而成为 beta tester,2003 年是 Macromedia Flash 的 dev volunteer, 2004 年成为 Macromedia 在中国的第一个技术员工,2005 年,Adobe 并购 Macromedia 结束,进入 Adobe 做工程师,2008 成为 Flash Video 与 Flash Media Server 的大客户技术经理,2009 年成为 Flash Platform Evangelist,2014 年离开 Adobe 前,除了 Flash,也参与了 Adobe HTML5 系列技术工具的相关工作。
2. 我现在是一家做 HTML5 技术公司白鹭引擎的技术合伙人,管理这家公司的研发团队,每天的工作都跟 HTML5 的 Web 技术相关。
3. 这个时间点回答这个问题貌似最好,因为一切答案正在浮出水面。
好了,回到答题本身。
我本人对于 Flash 和 HTML5 两个技术领域的观点判断大致如下:
Flash 已经走入软件生命周期的末期,是的,万物皆有始终,更何况 Flash。1994 年 4 月 10 日到今日,Flash 已经有 21 岁。21 岁对于一个人而言,正属风华绝代之年,但是在软件领域里,存活 21 年实在算的上是一个老家伙了。说到衰落,必然要提崛起。21 年的过程中,Flash 经历了三次成功高峰,分别是 1999 年的网络动画时代,2005 年的 Flash Video 时代与 2008 年的 Web Game 时代。这三次互联网领域的高峰,全部都被 Flash 赶上(不得不说命好运也好),并且这三次成功,引领了 Flash 在生命周期中的一次又一次产品形态上的变化。
Flash Animation 的流行引领了 Flash 的第一次成功,1999 年,借着第一波互联网.com 的热潮,由于当时 HTML 技术功能上的羸弱,大量被人所称道的 Banner,动画,MTV 都是借助 Flash 创作而来,这些充满神奇的交互效果充斥了每个网站,Flash 在网页动画创作领域开始快速崛起。我当时的雇主美国 Macromedia 公司旗下的 Flash,Dreamweaver 和 Fireworks 被国人亲切的叫做网页三剑客,当时我主要泡闪客帝国(前身是边城浪子的回声资讯)和蓝色理想这两个 Flash 开发者聚集的论坛。2004 年,借助着前几年 Flash 所取得的成绩,Macromedia 公司被 Adobe 公司以 34 亿美金收购。2005 年,Flash 有史以来最重要的版本之一 Flash 8(codename:8 ball)登场,这一版本里集成了 2 个最重要的功能,其中一个功能引领了后来 YouTube 和优酷土豆视频网站的成功,就是 Flash Player 里集成了 Sorenson Spark H.263(VP6) 的视频解码功能,而另一个功能为以后 Flash 可以创作更精彩的 Web Game 埋下伏笔,就是 Bitmap 和 Bitmapdata 位图操作的实现。2008 年,Flash 又“幸运”的赶上了社交游戏的浪潮,随着 Zynga 和 Facebook 的大获成功,Flash 在社交游戏的技术领域独领风骚,之后的 Stage3D 技术又让 Flash 彻底统治 PC 网页游戏领域。在 Flash 最为巅峰的这么多年内,任何其他类似的技术都没有在与 Flash 竞争上胜出,期间也出现过若干“Flash Killer”,包括 Silverlight,JavaFX,Lazslo 和 Unity Player。作为胜出者 Flash 自然有他的缘由,就是独一无二高度统一的 Flash Player,强大的内容设计开发工作流,多年积累而成的强大的社区生态。
水满则溢,月盈而亏。Flash 开始走下坡路业界都认为是从苹果乔布斯的那篇檄文而起。没错,那篇檄文是 Flash 开始走下坡路的开始,后续的一系列对 Flash 的不利消息又接踵而来,都给 Flash 造成了沉重的打击。我这里给各位总结一下 Flash 由盛转衰的几个重要事件。它们分别是:
可以说是一系列的坏消息,如果合在一起看,那简直是坏的不能再坏的消息了,其中很多的决策来自于 Adobe 自己,这有充分的理由让我们相信,Flash 这个平台型的技术已经进入了最后的生命周期。但 Flash 给 Web 进化带来了很多有价值的推动。
首先,在 Flash 最为鼎盛的时期,来自 Adobe 的官方统计,全球有将近 200 万的 Flash 开发者,这个群体不同于其他语言的开发者,可以说他们是一个独特的开发者群体,我们可以理解他们才是真正的“Full Stack”工程师,会开发游戏,会制作动画,会创作富媒体应用,甚至很多人还兼修美术,烹饪和刺绣。从 2010 年 Flash 开始走下坡路,这些 Flash 开发者陆续转型,他们成为了后来众多应用和游戏公司的中坚力量,目前市场上大量的 Unity,Cocos 的手游开发者,Egret Engine 社区里近一半的 HTML5 开发者,甚至是大量的 AngularJS 和 JQueryMobile 的开发者,都来自于原来的 Flash 社区。
其次,Flash 开发生态为 HTML5 标准的进化带来了大量有借鉴价值的范本模型。Adobe 通过 Flash Professional 工具开放了 JSFL 扩展;支持了 JQuery Mobile 和 WebGL 的输出,甚至于矢量绘图的动画都支持 CreateJS 的导出;Adobe 将全球最流行的骨骼动画项目之一 DragonBones 转给了 Egret 继续原生和 HTML5 版本的开发工作;Flex 项目的主程成为了 Google AngularJS 的作者;曾经流行的 Flash 游戏框架 Flixel 的作者后来又参与创作了 HTML5 游戏框架 Phaser;被 Adobe 捐助给 Mozilla 组织的 AVM2 虚拟机的源码间接驱动了 IonMonkey,SpiderMonkey 项目中 GC 的更新换代和 Flash 转换 HTML5 项目 Shumway 的流行;Adobe 的 ActionScript3.0 的语法方式被 Egret Engine 团队在 HTML5 的引擎产品设计上所借鉴;Stage3D 项目后续促成了 Away3D 和 Minko 等原 Flash3D 项目完美转型 HTML5 技术领域。还有很多 HTML5 相关的视频和音频项目在过去几年的发展中大量的融合了 Flash 相关的媒体库来提供更多的功能支持,当今大量的 HTML5 Video Player 都是从原来的 Flash 领域变换而来。这一切都是 Flash 技术带给当今 HTML5 领域的财富。现实是很多人并未看到这些,看到的是当 Apple 宣布 iOS 不支持 Flash 技术开始,有些所谓的“专家”和“专业媒体”将 Flash 营造成 HTML5 的头号死敌的话题博取业界的更多眼球,其实他们并不关心 Flash 和 HTML5 为 Web 领域真正带来了什么,也不关心谁赢谁输,他们唯一关心的就是自己的知名度和访问量。
接下来说说第二个观点,Flash 从未真正赢得过移动领域。在开始这段之前,推荐各位在知乎看看我回答的这篇帖子“iOS 不支持 Flash 的真实原因是什么?” iOS 不支持 Flash 的真实原因是什么? - 知乎用户的回答 。下面则是更多事实可以证明 Flash 一路走来,赢得了 PC,丢掉了移动市场:
1. 在 2004 年,Flash 跟中国移动对接动画标准一事,当时 Flash Lite 进入中移动动画标准评测流程之前,已经有两家利用 Flash Player 6 SDK 泄露的源码而做了山寨 Flash 播放器的公司在跟中移动对接了,一家韩国公司,一家中国公司,而且接触中移动的时间已经不短。Macromedia 虽然是 Flash 官方,但是最后一个进场,而且当时中移动已经初定一家山寨 Flash 的产品成为标准,称之为 MFlash。虽然中移动知道 Macromedia 是 Flash 的官方,技术更强,也乐意重新在中移动定制的功能机上使用 Flash Lite 标准,但是由于 Macromedia 坚持要求中移动承诺植入 FL 的设备总数,并按照单台 1 美金收取授权费。因为中移动是大公司,多少人挤破头想和中移动合作,但是 Macromedia 这家美国公司偏偏坚持成为标准,每台设备要收 1 美金。结果可想而知,Flash 第一次错过了中国最大的移动运营商,很不幸的是,主导 Flash 播放器收取设备授权费的这个美国人跟着 Macromedia 一同进了 Adobe,还被提升成为全球业务的高级总监,不幸的事情再次发生就自然而然了。
2. Nokia 当年太有钱了,这家公司带头支持了内置 Flash Lite,也带头支付给 Adobe 了 Flash 的设备授权费用。这一行径使得 Adobe 坚持认为 Flash 在移动设备上能收取费用且必须收取费用,不论是任何厂商,都不例外。一刀切的收费策略也自然引发了当年很多大大小小手机厂商的不满,当然,这个 Adobe CEO 可能不知道,只有我们这些处在一线的员工才了解。但是这条线的决策当时由上面说到的那个美国人来负责时,KPI 自然也是以能为公司贡献多少利润来衡量团队业绩的唯一标准。所以,只看眼前利益,不花大力气培养移动生态成了 Flash 错过移动市场的另一个主因。
3. 当年 Adobe 对于 Flash 播放器的源码访问已经到了无比严苛的地步,只有在美国注册且有实体研发的公司才能通过 clean room 的方式获取 Flash Player 的源代码进行移动设备的定制,其他硬件公司都必须通过引入 Adobe 授权的第三方 Porting Partner 的机制来获取定制后的 Binary Build。这个流程简单描述就是,如果我是一家中国的手机公司,有植入 Flash 播放器的需求,而且愿意付费,那我要跟 Adobe 授权的一家 Porting 公司签协议,这家 Porting 公司注册在美国,研发在印度......印度,你懂的,然后印度人来中国找我,了解我的设备( 这里还有一个大问题,就是即使签署保密协议,但这家 Porting Flash 的公司必然知道我将来要发布到市场的新手机的所有硬件规格,妈蛋啊,我新手机保密还未上市就都让别人全知道了,有可能这家知道我的手机规格的公司还在为我的竞争对手做 porting!虽然有了保密协议,好吧,就当是完全保密吧 ),然后评估是否可以移植 Flash,然后回印度在 clean room 里访问 Flash 源代码,进行移植。移植完成后,要把装有定制 Flash Player Build 的样机送回给美国 Adobe 进行认证和备案,符合一切 QA 认证流程后,告知我可以出货了。好吧,这个蛋疼的流程虽然我不知道当初是谁制定的,但是结果就是,我有款新上市的手机有植入 Flash 的计划,我要先把我的硬件信息全部公开给第三方进行评估,而且手机将来能否出货,要先等几个月的 Porting 和 Certify 的流程,还要先付给 Adobe 一笔预付款,最后可能手机上市日期因为种种原因流产了……这么死板不人性化的流程成为 Flash 错过移动市场的第三个主要原因。
4. 就是众所周知的苹果在 iOS 上屏蔽 Flash 的事件,虽然当年 Adobe 用了“We Love Flash, We Love Apple”极富煽情的公关方式来应对,但是然并卵,Flash 错过了移动市场上的第一个大腿 iOS。
5. Adobe 然后开始决定不再移动设备上花费大量的人力物力来维护和开发 Flash 播放器,所以接着又官方宣布了不再更新安卓版本的 Flash Player 的决定。转而鼓励开发者使用 Adobe AIR 的打包技术来将 Flash 内容打包为原生的解决方案,这个方案几乎成功的实现了 Flash 进入移动市场的目标,因为全球当时已经有数十万个 iOS 的 app 是通过 Adobe AIR 打包而成。但是突然,又发现了巨大的问题,那就是 AIR SDK 打包原生,要依赖 Apple 官方提供的原生系统扩展 API,比如支付,GameCenter,文件访问等等。而 Adobe AIR 的 ANE(Adobe Native Extension) 则是一个黑盒,那就变成苹果只要升级系统或调整 API,ANE 如果不及时更新,所有 AIR 打包的原生 app 都被卡住,需要等待 Adobe 升级更新 ANE 包才可以继续保证 app 的正常运转。这一个无法逾越的深坑让大量的用 AIR 打包原生 app 的 Flash 开发者大倒苦水,对 ANE 的海量吐槽直接飞向 Adobe 总部。如果 Adobe ANE 团队及时关注产品反馈并及时更新,这一个跟 XCode 打包几乎一致的 GCC/LLVM 打包方案完全可以茁壮成长下去,可惜,Adobe 又一次做了一个碉堡了的决策,将 ANE 美国研发团队裁撤,将工作转到印度班加罗尔做维护,又是印度,你又懂了。终于,Flash 又一次错过机会。
6. 虽然黑莓当时内置了 AIR,QNX 的车载导航几乎都是 Flash 和 AIR 技术,但是市场太小了,一个倔强的浪头完全无法逆转整个形势了。
所以我们可以认定 Flash 即使在 PC 上有过三次辉煌,但是它并未真正的赢得过移动市场,用一首诗来形容它的移动之路就是“待到秋来九月八,我花开后百花杀。冲天香阵透长安,满城尽带黄金甲”。在移动设备如日中天的今天,Flash 本有机会开启并引领富媒体 Web 在移动设备上的革命,但它并非赢家。
再来看第三个观点,HTML5 已经重回轨道,未来取胜的关键则在移动领域。为什么这么讲。PC 发展落后于移动已经是事实。今天,人手至少一台智能手机,移动流量超越了 PC 流量。技术为业务服务,业务由市场导向。HTML5 狭义上是超文本链接标记语言第 5 版,单从名字上并无神奇之处,但广义而言,HTML5 代表了新一代的 HTML, CSS 和 JavaScript 技术的总和,它可以跨平台,这在屏幕尺寸和分辨率林林总总的移动设备上简直就是天生的优势(天生就是东宫太子),响应式设计,跨操作系统,而且随着硬件计算能力的飞速进化,浏览器内核或者 VM 对于脚本型技术的性能瓶颈也在被逐渐抹平,在不是特别关注性能的应用开发上这个缺点渐渐被忽略不计。网络资源加载的尴尬也随着移动网络的速度飙升和使用成本的大幅降低而不再成为关键性的制约因素。HTML5 虽然经历了 2012-2013 年的重大技术低潮,一大波 HTML5 的技术先锋在这两年沉沙折戟,但是不妨碍它的跨平台,标准开放的技术本质,2014 年后再次卷土重来。
任何人都需要通过移动设备连接世界,获取信息。这个基于 Touch 的市场机遇远大于使用键盘鼠标的 PC 领域,每天若干的创新都在这里出现,内容层出不穷,且这个领域的内容呈现需要高度的跨平台,跨设备的适配性,HTML5 这种开放性的 Web 技术成为这些创新的主要技术方案顺理成章,因为 HTML 的发展史就是一部互联网的发展史。
PC 浏览网络信息,仍然靠浏览器。但是移动设备浏览网络信息,app 就是介质。微信,微博,手机助手,新闻客户端,所有 Webview 支持的 app 就可以很完美的采用 HTML5 技术。HTML5 技术在移动设备上的用户场景原则上可以无限大,任何我们现在接触的 app,都有使用 HTML5 进行制作开发的可能。突破浏览器对于 HTML5 的束缚是 HTML5 在移动设备上走向顶峰的必经之路。我经常跟人争论的一个话题就是,谁规定 HTML5 的标准化的执行和实现就一定要依赖于浏览器?用 HTML5 技术开发的内容,但是不用浏览器形态的方式去浏览,算不算是 HTML5 所涵盖的领域?
另外,PC 某些垂直领域在几年内仍然无法摒弃插件体系,尤其是页游市场。国内目前的页游市场是几百亿人民币的规模,而这个领域使用 Flash Stage3D 技术已经根深蒂固,从游戏创作的技术工作流程和性能要求上,HTML5 的能力目前还无法达到那个高度,光从 Flash Stage3D 可以在 PC 调用 DirectX 和 OpenGL,而 HTML5 只能调用 WebGL 这点来看就被完爆。而且 Adobe Flash 播放器已经在 PC 领域渗透超过 10 亿台终端,这个市场占有率还不能短时间内被取代,在 Flash 与 HTML5 的更新交替年代,与其等待 PC 市场漫长的自然更迭,HTML5 为何不能从没有 Flash 的移动市场强势介入,成为跨平台富媒体内容的开发首选?
最后一个观点是建立在第三个观点之上的,HTML5 最广泛的被接纳与普及前,还要先解决以下几个关键问题。
1. HTML5 的标准化的能力推进需要更多参与制定厂商的通力协作,不要把商业的博弈及目标凌驾在标准化的普及之上,公心要大于私心,通力协作,才可能尽快实现更多具有前瞻创新技术标准草案的落地。HTML5 规范虽然在 2014 年底终于定稿,但是这其中经历了太多的曲折,推进的过程中充满了各大浏览器厂商借助标准扩大行业话语权的暗战,目前,仍然有大量的创新标准无法在日新月异的移动领域市场快速被定案与普及。太多事实,给各位列举几个。CSS3 的标准落地异常复杂,甚至于出现在开发者创建和声明 CSS3 新属性时,针对不同浏览器,一个属性要设定针对浏览器的众多前缀才能保证浏览器对它的支持,这么蛋疼的编写设定虽然是过渡方案,但是不得不说标准化落地过程中产生的各种额外代价都无形的转嫁给了开发者。另一个例子是关于 WebGL,来源于 http://webglstats.com 的数据统计,移动设备对于 WebGL 的支持率已经上升到有史以来的最高,超过 8 成支持 WebGL 内容的访问,这无疑是可喜的状况。但是从另一方面的比较则看出 WebGL 的进化仍面临巨大挑战。首先是,WebGL1.0 从 2011 年起到现在已经近 4 年多几乎没有过任何能力上的进化,这几年全部都是标准规范草案定义能力的推进普及,变革速度相比起微软的 DX12 和 Kronos 组织全新一代的 Vulkan 技术的进化速度相比,简直惨不忍睹。当未来 PC 和主机游戏,甚至手机原生游戏都更多的可以从下一代的 DX 和 Vulkan 技术中全面获益,获得飞一样的提升时,我们 HTML5 的开发者们仍旧在为越来越多的设备终于支持 WebGL 而沉浸其中。好比有钱人又买别墅了,我还在为今年终于工资涨了几百而欢欣雀跃一样讽刺。如果 HTML5 技术想大成,不仅标准化的普及要快,功能性的创新也同样要快。
2. HTML5 相关开源项目(包括 DOM, JavaScript/TypeScript, CSS)在 GitHub 上无疑是总数世界第一。但是另外一方面,HTML5 仍然需要更为强大,更有工作效率的工作流。我们需要在 HTML5 领域内有能跟其他领域一样世界级的工作流方案,强大的引擎,高度可视化的创意工具,云与端的计算完美结合,这些都能更有效的保证我们的工作成果和工作过程越来越专业。各行各业最顶级的创意开发工具,目前来看,没有一个是专门为 HTML5 技术而生的。例如 Visual Studio 虽然也可以支持 HTML5 和 JS 开发,但是相比 C++, C# 在 VS 中的集成工作流,待遇显然就是一个不招待见的“干儿子”。我们 Web 前端开发已经习惯用各种 script editor,配合浏览器的 developer tools,再配以各种 node 上的 testing, build 和 publish 工具,最后再通过 Phonegap 或者 Cordova 类似的打包来完成工作,这就是我们 HTML5 开发者的工作流,且我们认为已经很好了。但是这是我们被习惯被教育后采用的工作方式,是因为业界本就没有针对 HTML5 更高效专业的工作流。我天天弯着腰犁田,换个牛车替我就感觉很满足了,殊不知世界上有插秧机这种更高效的工具一样。正在使用的不代表就是最好的,因为更好的我们没见过。HTML5 技术领域的创新绝对不能忽略更高度更自动化的工作流,这是一个高度繁荣市场的终极需求,不是某个通过 terminal 和 command 就能搞定一台机器的极客需求。
虽然 HTML5 看似已经成了移动市场上实现网络富媒体交互技术的好选择,但是 HTML5 的技术未来并不是想象中的那么乐观,前路依然任重而道远。