有了HTML5,Flash还能走多远?
谈到Flash能走多远的问题时,我们不得不先聊聊作为Flash前辈的Applet。
所以要提它,是因为人类历史上第一个运行在浏览器之上的交互式应用,本来就是Java小程序,而非什么Flash。
早在1995年之初,当Gosling和Gage在WebRunner浏览器(即日后的HotJava浏览器)上展示3D分子模型之际,人们对Java的第一印象就是“这是种可以将静态网页变成动态的语言”,而并非这是种“开发手机应用的语言”或者这是种“开发企业级应用的语言”。
直言不讳的说,自从Java与Applet诞生之初,直到2000年Flash5出现以前,Java和Applet一直都是网站动态效果实现的首选媒介(尤其是网络教学)。而在此以前的Flash还算不得主流,登不得台面。
为什么Java(Applet)会变得不如Flash普及?
关于这点,抛开Windows XP后期版本不再内置JVM的影响不谈,应该说同Sun高层的愚蠢无能,以及Macromedia高层的下作龌龊不无关系(某个时期的Flash真的就像流氓软件一样,不经过任何预警便自行安装,也没有必要的砂箱保护,什么都能运行)。
正是这群墨守陈规,不思进取,被Java技术所带来的惊天财富冲昏了头脑(2000-2001年Sun最兴盛时,股票峰值曾达258.75美元/股,公司估价超过2000亿美金),对技术趋势把握犹如童蒙的Sun高层,最终葬送了Java在网页乃至桌面领域的大好河山。
要知道,当时的Applet虽然有着相当完善的Java类库支持,并有稳妥的砂箱机制保证程序安全,但运行速度却异常缓慢(特指JRE1.0-1.3),运行界面也远没有Flash那么鲜艳友好,已经变得渐渐无法适应越来越复杂的网络展示需求,业界甚至开始出现关于Java与Applet的不利消息。
更关键的是,假如当时没有Macromedia的Flash,或者Flash根本就是个连Applet也不如的垃圾那还好说。可偏偏,偏偏Flash在界面效果与运行速度方面都远胜于当时的Applet!而这群理应在脸上被刻下S13星烙印的Sun高层,不单在不必要的时刻过早地与微软决裂,甚至还对Flash这样新兴技术的威胁无动于衷!
他们即不想办法走正道完善自己的Java与Applet体系,又不会运用邪道将Flash挤出市场,既没能预见到网页前端市场中蕴含的巨大商机,更无法适时的调整公司经营战略寻求新的Java赢利模式,任凭别人风生水起,自己却只管悠哉游哉的数着因股价飞涨而带来的绿色钞票。
——此辈若能成事,岂有天理乎!
事后的结果证明,相对于系统内置,小巧灵活,并有足够强大图形编辑工具支持的Flash。原有的Applet技术显得臃肿、缓慢、不易开发,甚至没有一款拿得出手的图形编辑器。
要知道,在IT领域中按资排辈这种事情根本就不曾有过。即使几十年的老店,也很可能会被某个车库中诞生的新生公司打的体无完肤。
更何况,在那些愚不可及的Sun高层眼里,网页前端甚至桌面市场或许本就是一盘可有可无的生意,赢了没什么不好,输了也不可惜。毕竟Applet只是Java功能中的一小部分,Sun有SPARC、Solaris、Java这三大法宝,即便Java中舍弃了Applet,依然有大把本钱,根本不必在意。
很明显,当时的Sun高层,对于“占领桌面,跳进口袋”这样的经营理念还缺乏认知。假如他们明白,那么无论Applet/AWT/Swing也好,J2ME也罢,也决计不会是今天这种地位。
此消彼长下,Flash的兴起与Applet的堕落几乎都成了必然,越来越多的开发者投向Flash阵营,最终导致了今天Flash的兴起与Java(Applet/AWT/Swing)在网页前端领域的没落。
在新的时代里,伴随HTML5的逐渐普及,网页技术的大洗牌时代将会再次来临。
正所谓“长江后浪推前浪,前浪死在沙滩上”,就像当时的Applet技术,会被更先进,更进取(也更流氓)的Flash技术所取代一样,新技术体系的出现,永远是旧有技术体系所无法回避的恐怖梦魇。
——就连Abode公司与Flash也无法逃避这种规律。
诚然,现今的Flash比之当初改进了很多,Abode将它变得比以前更完善(他们干脆重写了Flash核心),除了原有的小动画、小广告、小游戏之外,Flex的出现让J2EE或其它技术体系能够利用Flash开发商业应用,ActionScript脚本让死硬技术派们可以直接编写出Flash程序而不必拖拽界面。小到AV视频展示,大到网络游戏应用,几乎到处都可以见到Flash的踪影,Flash简直成了RIA的代名词。
无论实际怎样,在当今这个时代里,“够快、够简、够普及”早已成了人们对Flash技术的潜在共识。
——然而,这些印象恐怕也只能维系到HTML5普及以前。
没错,HTML5标准的出现,将彻底颠覆现有的网页前端生态体系。
因为HTML5的诞生,很大程度上就来源于浏览器厂商们对于网页前端技术需求的反思。干脆点说,根本就是对于Flash大红大紫的一种醒悟。
在这里,我们姑且将其想象为一场阴谋,一场“HTML5”诡计。
在某个阴暗偏弊的房间里,业界的大佬们,或许曾经进行过类似这样的讨论“既然Flash用几MB的支持库就可以在浏览器上实现的功能,难道我们这些平台(浏览器)就做不到吗?既然是人人都要用到的功能,我们又为什么非要通过Flash进行中转实现呢?既然现在大家都需要这些功能,并且寻求更好的用户体验,干嘛不将它们绕过Flash,直接内置到浏览器中,以换取既快且稳的效果呢?!”
这些人大概会达成这样一种共识,那就是Flash很牛,牛到了几乎没它不成。可长此以往,兄弟们恐怕也都没得混了。所以,只好委屈Flash先走一步吧!
正如站在汽车上跑步,无论跑得再快,始终跑不过汽车一样。任凭Flash的UI再漂亮、制作再简便、运行速度再快,它又该如何超越它所在的浏览器平台本身?如何摆脱这群大佬巨鳄的魔掌呢?
事实上,HTML5所提供的API标准,彻底克制于Flash之上。一旦标准普及,毫无悬念的,HTML5将秒杀Flash。
可以设想一下,随着HTML5的逐渐普及,当你通过一个<video>标签就可以播放高清网络视频,当你通过一个<canvas>标签就可以渲染出相当靓丽的网页动画,当WebGL让你网页硬件加速,运行出不次于《魔兽世界》的3D效果,当WebSQL让你在浏览器中保存数据就像操作桌面应用那么简单,当WebSocket轻而易举地实现浏览器与服务器端通讯之际,谁还会关心什么swf,谁还会记得什么Flash?
Ext3.0提供的<video>标记应用效果:
Web3D效果:
不客气地讲,当HTML5真正普及之日,Flash的优点都将变得不能再称为优点,而它的缺点却会开始凸现得越来越严重。
所有依靠Flash,特别是依靠Flash在网页方面养家糊口的同仁们,我劝大家千万不要相信那个关于HTML5要到2022年才会正式实施的传闻,误以为还有很长的周期让Abode改进技术甚至相信自己能在此前就熬到主管级别。
只要稍微看看最近Chrome、FireFox的更新趋势,乃至未来的IE9规划,你立刻就会发现,它们会等你到2022吗?绝对不会!不到2015年,HTML5就已经是各个浏览器的事实标准了。
看到这里,你或许会说:“胡说!Flash可不只是那么一点功能,况且现在有那么多的Flash应用,难道都能轻易舍弃吗?兼容性问题你都解决了吗?”
——没错,原有的Flash功能,就是会被人们所遗忘舍弃。
正如有声电视机取代无声电视,电话机取代传声筒一样,让你在一台免费的PSP3,一台免费的Xbox中抉择你想要哪台主机,你可能很难下决定。然而,如果换成一台是免费的小霸王,一台是白来的Xbox间抉择,该搬哪台回家,肯定不用笔者去教。
即便网络上有97%的网站在使用Flash,即便网络上有数不清的Flash/Flex应用存在,一旦更简便、更快捷、更高效的HTML5标准普及,这些都会变得毫无意义。
毕竟新近的开发者们决不会选择一种低效、缓慢、过时、并且可以被替代的技术作为自己的开发语言。
到了这时,就算你给地球上60多亿人口每人配备一个Flash应用,这60亿也将成为一个永远不会增加的死数,也就是Flash的极限。而人有寿命,网站同样也有寿命,即便某些死硬派不愿放弃,即便某些死硬网站不改初衷,他们也只能维系自己这点地盘,却丝毫影响不了别人的选择。最终,他们不是被别人吞并,就是自己也改弦更张,至多是死抱着Flash直到寿终正寝,但无论如何,迟早都是同样的下场。
谈到这里时,我希望大家不要忘记,当初Netscape的市场占有率有多少,现在又有多少?更加不要忘记,当初Applet在网页前端应用的市场占有率有多高,现在又有多高?
假如他们的被取代大家都能想通,到了Flash被取代时,我们会再犯糊涂吗?不会。
——应该说,只要未来普及了HTML5,Flash回老家结婚就是注定的。
或者你还会想,如果低端走不通,那么我就走中高端,让Flash继续增加HTML5所不具备的特性,毕竟Flash10以后的安装文件也有10多MB了,所谓“虱子多了不咬,债多了不愁”,再加点也没什么,自然有人会用。
嗯,没错,如果Abode继续复杂化Flash功能,并能够完成那些HTML5所无法实现的复杂应用固然很好。
——但是,您是不是忘了点什么,真以为Java和C#都是摆设不成?
Applet/Javafx,Silverlight这些现成的网页前端应用解决方案是摆着好看的吗?Oracle、Microsoft在复杂应用,尤其是企业级应用上是吃素的吗?莫非Flash开发者就真的集体空闲到会用N多年来逐一重复开发轮子,然后再做项目?莫非有现成的一体化解决方案不用,资方还非要用你的Flash前台,微软或甲骨文的后台?即便你一口咬定Flash开发就是简单,但这时已经有了更简便的HTML5可用(甚至连swf的加载都省了),你又何苦自残呢?照此发展下去,就算开始时真有几个想不开的,可一旦做HTML5的渐渐多了,傻子始终会不够用的……
就在此刻,只要你去下载最新版本的Chrome,稍微尝试下HTML5即将带来的全新功能,你就会发现,以前看上去那么短小精悍的swf文件,曾几何时,怎么就变得这样臃肿没用了呢?!以前那么艳丽生动的Flash动画,曾几何时,怎么就变得这样繁琐呆滞了呢?!
——我们应该清楚的看到,HTML5的出现,并不仅是一场技术革新,更是一场业界洗牌!它将彻底破坏现有网页前端技术的游戏规则,将Flash打入万劫不复之地!
再者,这么多年来Flash普及甚广,吃这碗饭的人不在少数。而反过来说,Flash程序员品质参差不齐,技术有高有低,被人利用Flash中马,被人利用Flash盗取个人信息者更不在少数,对Flash深恶痛绝者也不在少数。
且不提乔布斯这样痛骂Flash的业界领军人物,单单是你我这样的普通技术人员,又有几个从没有被网站上的Flash广告搞的页面崩溃,又有几个没有安装过FlashBlock的呢?
有些Flash开发人员看到此处或许会心有不甘,但至少在网页前端领域,Flash的衰落已不可避免,并非你我这样的凡夫俗子所能干预影响。
在这里,就让我们提前说一句:“Flash你好,Flash再见” 吧!
Flash不成了,Applet/JavaFx,Silverlight还能有什么作为?
此刻,我们回头去看Applet,就会发现到它已然错过了一场本该属于它的技术革命,错过了一场本可以大赚特赚的饕餮盛宴。
假如当时的Sun管理者有幸穿越时间隧道到现今看看,并且活着回去。我想Macromedia的下场无非两个,要么被Sun收购,要么就是被Sun打的连北都找不到了。
更直接的讲,如果当时的Sun高层来到今天,看到JavaFX这种“后知后觉”的网页前端技术,看到JDK1.6这种“迟到”的性能改进,甚至捎带手将Android的做法也学习一下,并且在那个时代就付诸实践的话,还有什么Flash/Flex?哪来什么Silverlight?Java早该“千秋万载,一统江湖”了。
——但当时又有几个人能想到,网页前端市场会发展到如今这样白热化的地步呢?
历史不允许假设,穿越的事情更是“可求而不可遇”,我们所面对的,是一个Macromedia被Abode收购,Sun被Oracle收购的时代,也是一个HTML5即将渐渐普及的时代。
放眼当今,即便Flash真如笔者所言即将成为明日黄花,抛开有微软银弹力挺的Silverlight不谈,莫非连Applet/JavaFx这路“古董货”也会有所作为吗?
——笔者认为是可能的。
事实上,任何了解Flash的人都知道,Flash是很简单,很快捷,很高效没错。
但是,这也仅仅局限于简单的动画效果,或者说仅仅局限于一些比较简单的业务实现当中。
——任何一位有经验的Flash程序员,即便你有多爱Flash,恐怕也很难讲出ActionScript是一门设计完善,性能卓越的语言吧?
以Flash开发诸如偷菜、调教秘书的小游戏,抑或制作个上传下载的简单界面确实又快又好。但轮到真正复杂的应用时,譬如让你用它开发个3D的《魔兽世界》(仅指模拟效果),甚至要求再低些,让你去搞个《传奇》级别的网游,就根本不是那么一回事了。
而Java方面,我们都知道如蓝港在线之类的国内公司,在很早以前就率先尝试过利用Java技术开发过诸如《倚天剑与屠龙刀》之类的2.5D即时战斗类游戏,现今该公司所开发的《西游记》也依旧延续了这一体系。但假如我们将它转换为Flash,而非Java开发,试问哪家游戏公司既能做出这样的即时战斗效果,又不被活活卡死?谁敢说这样的话?!
你或许会说这只是个桌面应用,那我们就单说网页游戏,我们都很清楚现在国内有不少尝试用Flash开发网页游戏的公司,更有不少Flash开发者对于《黑暗契约》之类的国外网页游戏津津乐道。
但是,当你望着屏幕上每次过屏都反复下载的各种模块时,当你望着相互PK却突然静止不动或者模糊不清的画面时,当你望着稍不留神就会CPU占用达到100%,直到被敌人杀死也未必会再动的游戏时,你除了选择清空缓存永不再玩,还能干些什么呢?
事实上,即便Flash网页游戏如同雨后春笋般发展到今天,笔者始终没有见过一款哪怕是“不太卡”的ARPG游戏,甚至于连续玩上一段后不用刷新重进的RPG类也很少见。否则,笔者也不会在某Flash网游中白投了数百元去刷金龙蛋、凤凰卵,却最终选择不玩了事了。
在这里笔者不想刻意褒贬国内的一些Flash网游,只是随意摘取了某Flash游戏GM对某玩家评语的回复,或许就能稍见端倪(玩家具体评了什么,请大家自行从对话中推导)。
事实上,在这里还有一个比较鲜明的对比(好吧,我承认这是我截图的主因),那就是上面某位玩家提到了汉森的《倾城》,这是一款非常罕见的Java(Applet)网游。对比玩家的评论就不难发现,Flash与Java技术的决定性差异,究竟体现在了什么地方。
下图为《倾城》截图:
应该说,相对于适合简单图形应用的Flash而言,Applet(含JavaFX)截然相反,它庞大的类库与体积并不适应于很多需要快速加载的场合,以致某些人初次运行时会觉得它很慢。但是,只要加载过一次的应用,Applet(含JavaFX)都将自动建立其相关缓存,直到你修改相关应用并重新发布之前,Applet都不会再有重复下载的行为出现。
也就是说,Applet的慢仅仅局限于首次运行,而后便没有了那种烦恼。而Java本身固有的丰富支持库,以及超级强悍的网络通讯功能,更加不是Flash所能比拟的(更极端的讲,Java逼急了能上JNI,Flash怎么办?)。可以这样说,越复杂的游戏,对于Java就越是得心应手,越是复杂的应用,对于Java就越是驾轻就熟(类似于Sun公司的奇异特性,复杂的事简单,简单的事复杂……)。
而Flash的小巧、简单,却在这时变成了缺点,因为类库的不完备,你必须亲自开发大量的程序模块,才可能让它正常运行在诸如网游这样复杂的环境中;因为性能的不到位,你必须自行处理海量的图形资源,斤斤计较于某个对象的释放与否,才能保证程序不会突然静止不动。而即便你全部处理了这些,以Flash的固有能力来看,应用的稳定性将依旧欠佳,哪怕画面再好,只要稍微运行久些,迟早都原形毕露,该卡则卡,该崩则崩,该死则死。
更何况,一旦在Java中使用了OpenGL,那么即便是画面效果这个Flash中唯一的优点,也将不复存在。
比如Java网游中大名鼎鼎的RuneScape(http://www.runescape.com/),可以在网页前端高效运行3D游戏,却没有一丝一毫的延迟停顿。而在Flash网游的世界里,又有什么能和它比肩的3D应用(不卡的3D人物打斗示例都算)吗?如果有的话,麻烦哪位给个链接我看。
事实上,假如Sun最初就能像JRE1.6以后版本那样大幅度的提高图形运算速度,或者将DirectX与OpenGL调用更方便的绑定(直接提供API)在JDK当中的话,现在网页游戏的开发主流或许将是Applet甚至JavaFX了。
正因为Sun最初的不作为,才直接导致了后来许多人关于Java性能的误解与迷茫,造成了人们对Java性能“低劣”这种陈芝麻烂谷子的刻板印象,最终导致了很多人误上Flash的“贼船”。(最可气的是,因为Sun的行动过于缓慢,现今虽然有了JOGL之类的拓展应用,但很多搞Java的已然变得不会用OpenGL了……)
——古人云“观古今之成败,能先见事机者,则恒受其福”,诚不我欺。
伴随HTML5的普及以及Java性能的逐渐提升,Flash在前端的领先优势将不复存在,网页低端与高端应用将会产生分流,未来Applet/JavaFx或Silverlight究竟谁主沉浮,始终还是未知之数,希望Oracle不要再走Sun的老路,真真正正的认清形势,抓住机遇吧!
——“不谋全局者,不足谋一域,不谋万世者,不足谋一时”,何去何从,唯智者辨。
【相关链接】
[博客]最近反Flash的气氛很浓啊,尤其是Html5这个小P孩