iOS 不支持 Flash 的真实原因是什么? 顾雷,游戏开发 作为 Flash 资深开发者,看到大家的讨论里有很多错误的地方,就自己这些年跟 Flash 打交道的经验,解释一下,主要是针对大家的讨论,捎带回答问题。 个人经历,十五年 windows 客户端应用(流媒体,浏览器,网络下载)客户端游戏(2d 棋牌,3dmmo),全球首款 Flash as3 在线多人棋牌上线(07 年 5 月),全球首款 Flash as3 mmorpg 上线(08 年 3 月),全球首款 Flash 移动端游戏上线(11 年 10 月)。期间跟 Adobe 美国高层就 Flash,h5,platform 的发展讨论过两次。 先说说 Flash 的发展和优点。 Flash 在九十年代的优点,在浏览器还不支持 css 的年代,可以在浏览器播放动画,火柴人,阿贵系列,神啊救救我吧,大学生自习曲,无数的 mv,老一代网民还有印象吧。Flash 当时技术特点是超高压所比的文件格式,矢量绘图,边下边播。为了节约带宽,无所不用其极,资源都是按 bit 分配的,看看 swf 那恶心的格式就知道多省了。Flash 在那个时代远比浏览器高大上。 到了 21 世纪,带宽增加了,视频需求增加,但是当时的 windowsmediaplayer 和 realplayer 一统天下,但是这俩货,不缓冲个几十秒,视频都不好意思动起来。这时 Flash 的 flv 容器格式和 vp6vp7 视频压缩算法横空降临,一下子让大家知道原来看视频也不是必须缓冲,视频也可以秒看。国内大型视频网站土豆应该是最早全站只支持 Flash 的,06 年这一波视频网站,优酷,酷六,六间房,偶偶等都是 Flash 了。 07 年左右,Flash9 alpha 阶段的时候,Adobe 收购了 MM,07 年一整年,Flash 几乎没啥发展,就在这一年,页游悄然发展,07 年上线的 Flash9 的游戏凤毛麟角,08 年蓬勃发展,加之后来全球 social game 的大浪,Flash 再次成为页游的标配,很多之前在客户端都做不到的绚丽效果都能展现在 web 中,大量公司依赖 Flash 开发的产品赚的盆满钵满。 与此同时,苹果安卓智能手机飞速发展,进入智能移动时代,Flash 的悲剧开始上演。作为一家 2b(to busoness 的意思)的只会赚企业钱的公司,卖拷贝,是这家公司骨子里的基因,遇到一个软件,一个功能,第一反应就是这东西对谁有价值,谁会花钱,定价多少合适,怎么能持续收钱。不会放过任何收钱的机会。因此有了前面 7yue 说的收费。不过就算不收费,当时移动端要支持 Flash 是不容易的,移动端要支持的是 Flash9,而不是 Flash lite,这是两个东西,因为 9 的功能更强大,语法升级,类库升级,虚拟机升级,内存占用大很多,而且是主流,统一的。Flash lite 非常不统一,每个硬件商都有自己的扩展。对于 0708 年的移动设备来说,内存是个稀缺资源。举个例子,08 年 pc 主流还是 384 和 512m 内存,当时移动应用可用内存一般不超过 100m,而 Flash9 虚拟机就要占去几十 m,这是硬伤。很多程序响应慢,崩溃都是因为内存不够。就算手机想支持也是没办法的。关于内存,Flash 页游做得好的,大概控制在 150m 到 200m,做得不好的,分分钟跑到 500m,1g 都有。就内存这一项,就可以让你想用也用不了。此外,Flash9 的 avm2 虚拟机 +as3 类 js 语言,语言和性能都远远落后于 java 和 c# 虚拟机,导致 cpu 功耗也比较高。相当于你让 2000 年的电脑运行 2014 年的剑灵,错位了。因此移动端无论对浏览器还是对本地应用,Flash 都有些鸡肋,就算支持了,也难成气候。乔帮主明确不支持的是浏览器对 Flash 的支持。 后来,Adobe 另辟蹊径,2011 年推出 Flash 移动端原生应用的开发,受限于语言和虚拟机,无论 cpu 效率还是内存,都没法和原生相比,而移动端系统对内存管理及其严格,不能像 pc 那样拿硬盘当虚存让你跑,加之 Flash 程序员整体内存控制意识较弱,Flash 始终没有成为主流,早期因为机能问题,兼容问题非常多。随着手机硬件的发展,14 年开始,Flash 原生程序基本没啥兼容性问题了。 最后再说说 Flash 技术的局限性。 作为操作系统和浏览器的八竿子打不着的亲戚,Flash 也很难得到他们的有效支持。举个例子,在万恶的 ie6 年代,浏览器说崩就崩,说卡就卡,ie 留给 Flash 插件的工作集内存极小,这个东西对运行速度影响至关重要,此外 Flash 窗口作为浏览器的子标签渲染,让不让你有窗口,让不让你显卡加速,让你用多少 cpu 和内存,都得看浏览器大爷的脸,浏览器让你只能绘制在浏览器提供的缓冲区,不支持显卡加速,降低你的线程优先级,限制你的工作集内存,都能玩死你。firefox 上一个支持 Flash 的 mode=transparent 的 bug,从 05 年到 firefox 换了 webkit 内核也一直没解决。不是亲儿子,作为外人,os 和 browser 稍微偏偏心,就能玩死你。Adobe 自己也早就看到这点了,同时 Adobe 主要的客户是设计师,是媒体,只要浏览器存在,html 就存在,就需要 h5 的工具,因此 Adobe 很早就将 h5 作为未来的重点。 回到题目,在 07 年,乔布斯说 ios 不支持 Flash 就相当于在 97 年说 pc 不支持 mp4 一样,不是给当时的机能设计的产品。 说到商业利益冲突,确实有,Adobe 在 10 年左右有个 Flash store 的项目,想打造跨平台的基于 Flash 的应用的 store,还有广告平台,但是一个没有操作系统,又不够流氓的公司,谁会愿意推你的 store 呢,后来这个项目销声匿迹了。 关于 Flash 视频烧 cpu,主要是高压缩的编码格式,解码更费 cpu,flv 容器支持的编码格式又有限,自然更废了。 Flash 在 pc 浏览器还是主流,手机浏览器不是富媒体的主战场,无论 h5 还是 Flash 都用处不大,况且 h5 是人家浏览器亲儿子,不会给你机会。关于原生应用,其实性能要求不高,不在乎包大小,不在乎动态更新,熟悉 Flash 的话,继续用 Flash 也完全没问题,h5 都有人敢用,Flash 有啥不敢。 Flash 是曾经的辉煌,为不支持 css,dhtml,视频的浏览器带来了不可替代的体验,但不是亲儿子,容易不受待见。我看评论说 Flash 开发不方便,开发浏览器内富媒体应用,脚本,动画,调试,还是 Flash 是最方便的,Flash 不方便,效率还不好,大家早就改用 h5 做 pc 页游了。老外很多游戏,为了支持良好的体验,大量动画都是 Flash 制作,再让程序支持 Flash 格式的解析和回放。 有人说 scaleform,那东西是自己的 Flash 引擎,没用 Flash 控件。 查看知乎原文