有了HTML5,Flash還能走多遠?
來源:互聯網
上載者:User
談到 Flash 能走多遠的問題時,我們不得不先聊聊作為 Flash 前輩的 Applet 。 所以要提它,是因為人類曆史上第一個運行在瀏覽器之上的互動式應用,本來就是 Java Applet,而非什麼 Flash 。 早在 1995 年之初,當 Gosling 和 Gage 在 WebRunner 瀏覽器(即日後的 HotJava 瀏覽器)上展示 3D 分子模型之際,人們對 Java 的第一印象就是“這是種可以將靜態網頁變成動態語言”,而並非這是種“開發手機應用的語言”或者這是種“開發企業級應用的語言”。 直言不諱的說,自從 Java 與 Applet 誕生之初,直到 2000 年 Flash5 出現以前, Java 和 Applet 一直都是網站動態效果實現的首選媒介(尤其是網路教學)。而在此以前的 Flash 還算不得主流,登不得檯面。 為什麼 Java(Applet) 會變得不如 Flash 普及? 關於這點,拋開 WindowsXP 後期版本不再內建 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 技術所取代一樣,新技術體系的出現,永遠是舊有技術體系所無法迴避的恐怖夢魘。 ——就連 Adobe 公司與 Flash 也無法逃避這種規律。 誠然,現今的 Flash 比之當初改進了很多, Adobe 將它變得比以前更完善(他們乾脆重寫了 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 年才會正式實施的傳聞,誤以為還有很長的周期讓 Adobe 改進技術甚至相信自己能在此前就熬到主管層級。 只要稍微看看最近 Chrome 、 FireFox 的更新趨勢,乃至未來的 IE9 規劃,你立刻就會發現,它們會等你到 2022 嗎?絕對不會!不到 2015 年, HTML5 就已經是各個瀏覽器的事實標準了。 看到這裡,你或許會說:“胡說! Flash 可不只是那麼一點功能,況且現在有那麼多的 Flash 應用,難道都能輕易捨棄嗎?相容性問題你都解決了嗎?” ——沒錯,原有的 Flash 功能,就是會被人們所遺忘捨棄。 正如有聲電視機取代無聲電視,電話機取代傳聲筒一樣,讓你在一台免費的 PS3 ,一台免費的 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 的老路,真真正正的認清形勢,抓住機遇吧! 隨著 Java 效能的提升,也漸漸有中國網友會用 Java 製作一些簡單的案頭遊戲: http://blog.csdn.net/Kylixs/archive/2009/12/02/4922698.aspx 甚至在校生的畢設都會利用 Java 開發遊戲王聯機對戰版(據作者聲稱,此遊戲將有 3D 戰鬥效果): http://bbs.duowan.com/thread-15633573-1-1.html “不謀全域者,不足謀一域,不謀萬世者,不足謀一時”,何去何從,唯智者辨。