有了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孩