Flash:涅磐與重生
10月3號,Flash Player 11 和 AIR 3.0正式提供下載,一片安靜。最近這兩年來,關于Flash的新聞一向是以負面為主,先是 Silverlight 的挑戰,然后是 iphone和ipad的不支持及HTML 5的良好預期,Flash 看似風雨飄搖,明滅不定。實則不然。我個人觀點:Silverlight成不了Flash的競爭對手,主要原因是商業層面的原因。HTML 5還是初生嬰兒,需要進一步觀察。這些在本文后半部具體分析,本文重心還是Flash。
51CTO推薦專題:HTML 5 VS Flash 誰是海賊王?
下面先詳細闡述:
(1)什么是Flash平臺
(2)Flash平臺的兩次涅磐與重生
(3)Flash平臺的商業策略及這種策略的優勢和劣勢
我個人只有3年的Flash開發經驗和2個月的HTML 5開發經驗,受經驗所限,本文若有事實錯誤還請指正。
(1)什么是Flash平臺
什么是Flash平臺?這個問題絕大多數人、甚至絕大多數程序員都不知道,因為Flash一直游離在主流開發人群之外,大家對它的印象:最開始是網絡動畫和網絡廣告,后來是網絡視頻,接著是現在的網頁游戲。
下面用一句話來介紹什么是Flash平臺:
Flash平臺是與.Net和Java類似的運行時平臺,有虛擬機、有GC、有比較成熟的快速開發語言、有比較成熟的IDE。它們之間的不同是:
◆ Java是從Server端起家的
◆ Net是從桌面起家的
◆ Flash是從Web起家的
Java 現在統治了Server端的快速開發。.Net 統治了Windows下的Web開發、是桌面快速開發(還未統治)的重要選擇。誰會統治Web和移動APP的快速開發?目前只有兩個選項——JS和Flash。雖然目前JS的呼聲比較高,但我覺得Flash的勝機更大,或者是兩者的寡頭壟斷,后面比較html5和flash時再詳細分析。
Flash有一個運行時,現在叫avm2,相比Java和.Net的大個頭來說,這個運行時很小,只有很少的功能,甚至連線程都沒有。Flash Player 10的安裝包為2M+,Flash Player 11的安裝包為3M+。Flash 的可執行文件格式是swf,庫是swc,字節碼是abc(ActionScript Bytecode)。Flash的主流開發語言是actionscript 3.0,它是一種ECMAScript語言,我私下叫它javascript ++。actionscript 3.0 既有靜態語言的特性,又有動態語言的特性,什么屬性啊、事件啊、元數據啊等都有,是一門快速的開發語言。Flash的其它的開發語言有haXe,C,C++。順便說一句:haXe也能開發html5應用。
Web是Flash平臺的起家之地,以Flash Player為核心。在桌面上,Flash的解決方案是AIR(你可以把它看作WPF的類似物),在移動平臺上,Flash的解決方案也是AIR,在Android上,AIR是以虛擬機機制運行的,在ios上,是直接編譯成二進制執行的。
也就是說,目前的Flash已經從以前的Web平臺擴充到三個平臺:
◆ Web平臺
◆ Windows/Linux/Mac osx桌面平臺(這次AIR 3.0的發布,大幅度增強了桌面平臺的能力)
◆ 移動平臺(Android,ios,黑莓)
Flash是目前唯一一個可以快速開發,然后經過簡單的修改(連UI都是公用的)就可以在上面幾個平臺上跑的技術。就我個人的體驗,actionscript 3.0的開發速度比java高得多,比C#要略低。
好吧,順便在這里說一句,為什么我說Silverlight和Flash看似一樣,卻是截然不同的。
雖然從技術上Flash能做到的,Silverlight是都可以做到,但是微軟是絕對不會放縱Silverlight跨這么多平臺的,因此在商業上是絕對做不到的。隨著AIR 2.7的出現,以及微軟現在對win8、html5的態度,Silverlight已經提前出局了。Silverlight將是windows上的開發利器,但,僅僅限于windows平臺。這種層面的戰爭是商業戰爭,而不是技術戰爭。Silverlight雖然是微軟自己搞得,但現在看起來是后媽養的。Flash雖然是買來的,但和Adobe的發展習習相關,就像親兒子一樣。
Adobe有一個開源項目叫Alchemy,可以用C/C++寫Flash程序,這一方面會繼續增強:
We released Alchemy on Labs over two years ago as an experimental prototype that allowed developers to leverage C/C++ code in Flash Player and AIR. We have not updated the original Alchemy prototype, and while we noted from the beginning that it should not be relied upon for production content, we’ve received persistent requests from developers asking for official support in the Flash runtimes.
We’ve been listening and have decided to invest in creating an improved version of Alchemy, which we plan to release as part of a paid production offering for commercial development. We intend to make non-commercial use free of charge.
The production release will offer significantly better performance and productivity over the Labs prototype. By re-architecting major portions of the technology, we aim to enable code execution approaching native performance, scalable support for large code bases, full debugging support, up to 75% reduction in code size, and seamless integration with ActionScript – all while reaching virtually every connected computer on the web.
出處:http://blogs.adobe.com/flashplayer/2011/09/updates-from-the-lab.html
如果這一個目標實現了,直接在Flash平臺上寫高性能程序不是奢望。
(2)Flash平臺的兩次涅磐與重生
Flash平臺經過了兩次涅磐與重生。
第一次是2006年 Flash Player 9的發布。從Flash Player 8到 Flash Player 9的進步是質的飛躍,在虛擬機層面由 avm1 變為 avm2,性能的大幅度提高及由 actionscript 2 演化到 actionscript 3,使得Flash 平臺具有了挑戰其它平臺的可能性。
第二次就是這次Flash Player 11 及 AIR 3的發布。Flash Player 11 有一個重大的特性就是硬件加速的 3D API。雖然Silverlight 5也提供了硬件加速3D API,但是Silverlight 蝸牛般的推進速度令人遺憾。
這里再強調一下,這種戰爭是商業戰爭。Silverlight為什么安裝率不高?我認為有兩大原因:
(a)強行推行Silverlight 存在一定的法律風險,這個不是主要原因;
(b)就算Silverlight占有率是99.5%,微軟也得不到什么好處,反而需要花費巨大的推廣費用,這個應該是最主要的原因。除非微軟能夠把每臺機器上的Flash 給卸載掉,那個時候才能從Silverlight獲得巨大利益。能做到這一點的,只有我們天朝的周大先生,微軟沒有這樣的人物,a8m也不會讓他這樣干。
再看看Flash Player的成績。Flash Player 10是2008年發布的,現在的占有率是99+%。我在前幾個項目時還要考慮Flash Player 9,現在根本不用考慮了。而如果Flash Player 11能延續這個速度,2-3年之后,幾乎每一個機器的瀏覽器上就有了硬件加速3D API,這比普及瀏覽器還快得多。3D Web應用,3D 網頁游戲的首選技術呼之欲出了。
AIR 3的意義比Flash Player 11的意義更大。
AIR 3可以調用native api了(之前,只能和可執行文件通訊),這樣一來,在桌面開發就可以將界面和邏輯部分用AIR開發,而性能攸關部分用c/c++開發。
AIR3 支持桌面和移動平臺。印象中,從AIR 2.6已經支持移動平臺了,但是那個版本的性能表現很差勁。AIR 2.7表現還可以,這個是今年6月發布的,沒幾個月,目前用AIR開發的移動應用已經10000+了。并且,市面上已經有眾多的Flash游戲,這些游戲可以以很小的成本遷移到移動平臺上去。而游戲,是移動平臺上最主流的應用。
OO、快速開發、IDE、跨平臺、3D、native invoke,這些加起來,意味著什么呢?雖然移動平臺讓Flash Player 插件遭到了滑鐵盧,但是也給了Adobe一個崛起的契機,AIR3 就是吹響的號角。
(3)Flash平臺的商業策略及這種策略的優勢和劣勢
總體來說,Flash的平臺策略是小運行時+類庫擴展和源生擴展。這個運行時的核心是UI。UI是開發中工作量非常大的部分,能夠簡化這一部分的開發是Flash的核心優勢,而因為是小運行時,跨平臺的工作量不大。因此Flash可以輕輕松松隨隨便便的跨平臺,而.Net,Java這種重量級的選手跨平臺的代價就大多了。Silverlight也可以做這一點,但不會傻到真去做。
Flash平臺的三個核心優勢:
(a)廣泛的安裝基礎(這個拜網絡動畫、視頻而賜)
(b)統一的UI模型(兩個層面:基于Sprite層面的和基于mxml/data bindding/style層面的)
(c)跨平臺(主流平臺都跨了——各大桌面操作系統、各大web瀏覽器(桌面)、各大移動應用平臺)
Flash平臺的劣勢也是在于小運行時,運行時不完美,缺乏一些能力,對于大型應用不適合,只適用于中小型應用,而這類應用,恰恰是移動應用和Web應用的主流。
Flash、Silverlight和html5的比較分析
上面說了,Flash有三個核心優勢:安裝基礎、統一的UI模型和跨平臺。
對于Silverlight來說,.Net在技術上比Flash更為成熟,不過缺陷在于安裝基礎和跨平臺,這導致了Silverlight只能是Windows平臺上的移動應用和Web應用的可選方案。
對于html5,需要詳細的分析:
(1)安裝基礎:html5在移動平臺上的安裝基礎比較高,但是在桌面上的安裝基礎還很弱;
(2)UI模型:html + css + js 比較成熟,雖然瀏覽器兼容問題也客觀存在,但注意一下還是可以解決,js的話是個短板,它和C#,Java這種現代語言來說,生產力差距是明顯的,但如果要寫大型應用的話,可以用haXe這種萬能語言來補充;
(3)跨平臺:目前主要是跨移動平臺,桌面平臺的話,ie7,8的消滅還需要時日,對于中國來說,還得先干掉ie6。
html5最重要的優勢是它不是私有技術,受各大廠商歡迎。它的最重要的缺點有兩個:
(1)性能:這個性能有兩個限制,第一個是由于是公開的技術,各種實現上的性能不一樣,js在不同平臺上性能差距10倍100倍是常事。移動平臺不支持Flash是因為Flash應用在移動瀏覽器上幾乎跑不動。這并不表示Flash平臺比html5 平臺性能低下,反而目前,根據我的項目經驗,flash平臺的性能要遠遠高出html5平臺的性能,且是數量級的差異。同等的Flash 2D應用,如果用html5實現的話,在移動平臺上的性能簡直不忍目睹,即使是在桌面平臺上,IE9的Canvas有硬件加速,跑起來也還是顯得慢。當然,這些會隨著時間發展慢慢完善,但是,想想多瀏覽器,等每個廠商都完善是個漫長的過程。而對于私有技術來說,AIR 2.6在移動平臺上慢得像蝸牛,僅僅翻了個年,AIR 2.7在移動平臺上的性能就有了數量級的提升,這是私有技術的好處。第二個限制是js,js不是強類型的,這不利于大規模開發和高性能開發,會成為瓶頸。對于前者,由于js非常靈活,我們可以通過haXe這類語言引入強類型,但高性能,卻是實打實的問題。
(2)解決方案:出于發展初期,各種解決方案欠缺。
因此,未來的RIA可能三分天下:
◆ 50K以下的和50K以上的用戶眾多的非計算密集性應用,html + js統治
◆ 50K-2M之間(Windows平臺)、50K+(其它平臺)Flash統治,并會在桌面和移動應用上有一塊不小的領地
◆ 2M之上的(Windows平臺),Silverlight統治
IT界,新的競爭者總是出現在意想不到的地方升起。
原文:http://www.cnblogs.com/xiaotie/archive/2011/10/05/2199234.html
【編輯推薦】