Flash:涅磐與重生
10月3號(hào),F(xiàn)lash Player 11 和 AIR 3.0正式提供下載,一片安靜。最近這兩年來(lái),關(guān)于Flash的新聞一向是以負(fù)面為主,先是 Silverlight 的挑戰(zhàn),然后是 iphone和ipad的不支持及HTML 5的良好預(yù)期,F(xiàn)lash 看似風(fēng)雨飄搖,明滅不定。實(shí)則不然。我個(gè)人觀點(diǎn):Silverlight成不了Flash的競(jìng)爭(zhēng)對(duì)手,主要原因是商業(yè)層面的原因。HTML 5還是初生嬰兒,需要進(jìn)一步觀察。這些在本文后半部具體分析,本文重心還是Flash。
51CTO推薦專題:HTML 5 VS Flash 誰(shuí)是海賊王?
下面先詳細(xì)闡述:
(1)什么是Flash平臺(tái)
(2)Flash平臺(tái)的兩次涅磐與重生
(3)Flash平臺(tái)的商業(yè)策略及這種策略的優(yōu)勢(shì)和劣勢(shì)
我個(gè)人只有3年的Flash開(kāi)發(fā)經(jīng)驗(yàn)和2個(gè)月的HTML 5開(kāi)發(fā)經(jīng)驗(yàn),受經(jīng)驗(yàn)所限,本文若有事實(shí)錯(cuò)誤還請(qǐng)指正。
(1)什么是Flash平臺(tái)
什么是Flash平臺(tái)?這個(gè)問(wèn)題絕大多數(shù)人、甚至絕大多數(shù)程序員都不知道,因?yàn)镕lash一直游離在主流開(kāi)發(fā)人群之外,大家對(duì)它的印象:最開(kāi)始是網(wǎng)絡(luò)動(dòng)畫(huà)和網(wǎng)絡(luò)廣告,后來(lái)是網(wǎng)絡(luò)視頻,接著是現(xiàn)在的網(wǎng)頁(yè)游戲。
下面用一句話來(lái)介紹什么是Flash平臺(tái):
Flash平臺(tái)是與.Net和Java類似的運(yùn)行時(shí)平臺(tái),有虛擬機(jī)、有GC、有比較成熟的快速開(kāi)發(fā)語(yǔ)言、有比較成熟的IDE。它們之間的不同是:
◆ Java是從Server端起家的
◆ Net是從桌面起家的
◆ Flash是從Web起家的
Java 現(xiàn)在統(tǒng)治了Server端的快速開(kāi)發(fā)。.Net 統(tǒng)治了Windows下的Web開(kāi)發(fā)、是桌面快速開(kāi)發(fā)(還未統(tǒng)治)的重要選擇。誰(shuí)會(huì)統(tǒng)治Web和移動(dòng)APP的快速開(kāi)發(fā)?目前只有兩個(gè)選項(xiàng)——JS和Flash。雖然目前JS的呼聲比較高,但我覺(jué)得Flash的勝機(jī)更大,或者是兩者的寡頭壟斷,后面比較html5和flash時(shí)再詳細(xì)分析。
Flash有一個(gè)運(yùn)行時(shí),現(xiàn)在叫avm2,相比Java和.Net的大個(gè)頭來(lái)說(shuō),這個(gè)運(yùn)行時(shí)很小,只有很少的功能,甚至連線程都沒(méi)有。Flash Player 10的安裝包為2M+,F(xiàn)lash Player 11的安裝包為3M+。Flash 的可執(zhí)行文件格式是swf,庫(kù)是swc,字節(jié)碼是abc(ActionScript Bytecode)。Flash的主流開(kāi)發(fā)語(yǔ)言是actionscript 3.0,它是一種ECMAScript語(yǔ)言,我私下叫它javascript ++。actionscript 3.0 既有靜態(tài)語(yǔ)言的特性,又有動(dòng)態(tài)語(yǔ)言的特性,什么屬性啊、事件啊、元數(shù)據(jù)啊等都有,是一門(mén)快速的開(kāi)發(fā)語(yǔ)言。Flash的其它的開(kāi)發(fā)語(yǔ)言有haXe,C,C++。順便說(shuō)一句:haXe也能開(kāi)發(fā)html5應(yīng)用。
Web是Flash平臺(tái)的起家之地,以Flash Player為核心。在桌面上,F(xiàn)lash的解決方案是AIR(你可以把它看作WPF的類似物),在移動(dòng)平臺(tái)上,F(xiàn)lash的解決方案也是AIR,在Android上,AIR是以虛擬機(jī)機(jī)制運(yùn)行的,在ios上,是直接編譯成二進(jìn)制執(zhí)行的。
也就是說(shuō),目前的Flash已經(jīng)從以前的Web平臺(tái)擴(kuò)充到三個(gè)平臺(tái):
◆ Web平臺(tái)
◆ Windows/Linux/Mac osx桌面平臺(tái)(這次AIR 3.0的發(fā)布,大幅度增強(qiáng)了桌面平臺(tái)的能力)
◆ 移動(dòng)平臺(tái)(Android,ios,黑莓)
Flash是目前唯一一個(gè)可以快速開(kāi)發(fā),然后經(jīng)過(guò)簡(jiǎn)單的修改(連UI都是公用的)就可以在上面幾個(gè)平臺(tái)上跑的技術(shù)。就我個(gè)人的體驗(yàn),actionscript 3.0的開(kāi)發(fā)速度比java高得多,比C#要略低。
好吧,順便在這里說(shuō)一句,為什么我說(shuō)Silverlight和Flash看似一樣,卻是截然不同的。
雖然從技術(shù)上Flash能做到的,Silverlight是都可以做到,但是微軟是絕對(duì)不會(huì)放縱Silverlight跨這么多平臺(tái)的,因此在商業(yè)上是絕對(duì)做不到的。隨著AIR 2.7的出現(xiàn),以及微軟現(xiàn)在對(duì)win8、html5的態(tài)度,Silverlight已經(jīng)提前出局了。Silverlight將是windows上的開(kāi)發(fā)利器,但,僅僅限于windows平臺(tái)。這種層面的戰(zhàn)爭(zhēng)是商業(yè)戰(zhàn)爭(zhēng),而不是技術(shù)戰(zhàn)爭(zhēng)。Silverlight雖然是微軟自己搞得,但現(xiàn)在看起來(lái)是后媽養(yǎng)的。Flash雖然是買(mǎi)來(lái)的,但和Adobe的發(fā)展習(xí)習(xí)相關(guān),就像親兒子一樣。
Adobe有一個(gè)開(kāi)源項(xiàng)目叫Alchemy,可以用C/C++寫(xiě)Flash程序,這一方面會(huì)繼續(xù)增強(qiáng):
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
如果這一個(gè)目標(biāo)實(shí)現(xiàn)了,直接在Flash平臺(tái)上寫(xiě)高性能程序不是奢望。
(2)Flash平臺(tái)的兩次涅磐與重生
Flash平臺(tái)經(jīng)過(guò)了兩次涅磐與重生。
第一次是2006年 Flash Player 9的發(fā)布。從Flash Player 8到 Flash Player 9的進(jìn)步是質(zhì)的飛躍,在虛擬機(jī)層面由 avm1 變?yōu)?avm2,性能的大幅度提高及由 actionscript 2 演化到 actionscript 3,使得Flash 平臺(tái)具有了挑戰(zhàn)其它平臺(tái)的可能性。
第二次就是這次Flash Player 11 及 AIR 3的發(fā)布。Flash Player 11 有一個(gè)重大的特性就是硬件加速的 3D API。雖然Silverlight 5也提供了硬件加速3D API,但是Silverlight 蝸牛般的推進(jìn)速度令人遺憾。
這里再?gòu)?qiáng)調(diào)一下,這種戰(zhàn)爭(zhēng)是商業(yè)戰(zhàn)爭(zhēng)。Silverlight為什么安裝率不高?我認(rèn)為有兩大原因:
(a)強(qiáng)行推行Silverlight 存在一定的法律風(fēng)險(xiǎn),這個(gè)不是主要原因;
(b)就算Silverlight占有率是99.5%,微軟也得不到什么好處,反而需要花費(fèi)巨大的推廣費(fèi)用,這個(gè)應(yīng)該是最主要的原因。除非微軟能夠把每臺(tái)機(jī)器上的Flash 給卸載掉,那個(gè)時(shí)候才能從Silverlight獲得巨大利益。能做到這一點(diǎn)的,只有我們天朝的周大先生,微軟沒(méi)有這樣的人物,a8m也不會(huì)讓他這樣干。
再看看Flash Player的成績(jī)。Flash Player 10是2008年發(fā)布的,現(xiàn)在的占有率是99+%。我在前幾個(gè)項(xiàng)目時(shí)還要考慮Flash Player 9,現(xiàn)在根本不用考慮了。而如果Flash Player 11能延續(xù)這個(gè)速度,2-3年之后,幾乎每一個(gè)機(jī)器的瀏覽器上就有了硬件加速3D API,這比普及瀏覽器還快得多。3D Web應(yīng)用,3D 網(wǎng)頁(yè)游戲的首選技術(shù)呼之欲出了。
AIR 3的意義比Flash Player 11的意義更大。
AIR 3可以調(diào)用native api了(之前,只能和可執(zhí)行文件通訊),這樣一來(lái),在桌面開(kāi)發(fā)就可以將界面和邏輯部分用AIR開(kāi)發(fā),而性能攸關(guān)部分用c/c++開(kāi)發(fā)。
AIR3 支持桌面和移動(dòng)平臺(tái)。印象中,從AIR 2.6已經(jīng)支持移動(dòng)平臺(tái)了,但是那個(gè)版本的性能表現(xiàn)很差勁。AIR 2.7表現(xiàn)還可以,這個(gè)是今年6月發(fā)布的,沒(méi)幾個(gè)月,目前用AIR開(kāi)發(fā)的移動(dòng)應(yīng)用已經(jīng)10000+了。并且,市面上已經(jīng)有眾多的Flash游戲,這些游戲可以以很小的成本遷移到移動(dòng)平臺(tái)上去。而游戲,是移動(dòng)平臺(tái)上最主流的應(yīng)用。
OO、快速開(kāi)發(fā)、IDE、跨平臺(tái)、3D、native invoke,這些加起來(lái),意味著什么呢?雖然移動(dòng)平臺(tái)讓Flash Player 插件遭到了滑鐵盧,但是也給了Adobe一個(gè)崛起的契機(jī),AIR3 就是吹響的號(hào)角。
(3)Flash平臺(tái)的商業(yè)策略及這種策略的優(yōu)勢(shì)和劣勢(shì)
總體來(lái)說(shuō),F(xiàn)lash的平臺(tái)策略是小運(yùn)行時(shí)+類庫(kù)擴(kuò)展和源生擴(kuò)展。這個(gè)運(yùn)行時(shí)的核心是UI。UI是開(kāi)發(fā)中工作量非常大的部分,能夠簡(jiǎn)化這一部分的開(kāi)發(fā)是Flash的核心優(yōu)勢(shì),而因?yàn)槭切∵\(yùn)行時(shí),跨平臺(tái)的工作量不大。因此Flash可以輕輕松松隨隨便便的跨平臺(tái),而.Net,Java這種重量級(jí)的選手跨平臺(tái)的代價(jià)就大多了。Silverlight也可以做這一點(diǎn),但不會(huì)傻到真去做。
Flash平臺(tái)的三個(gè)核心優(yōu)勢(shì):
(a)廣泛的安裝基礎(chǔ)(這個(gè)拜網(wǎng)絡(luò)動(dòng)畫(huà)、視頻而賜)
(b)統(tǒng)一的UI模型(兩個(gè)層面:基于Sprite層面的和基于mxml/data bindding/style層面的)
(c)跨平臺(tái)(主流平臺(tái)都跨了——各大桌面操作系統(tǒng)、各大web瀏覽器(桌面)、各大移動(dòng)應(yīng)用平臺(tái))
Flash平臺(tái)的劣勢(shì)也是在于小運(yùn)行時(shí),運(yùn)行時(shí)不完美,缺乏一些能力,對(duì)于大型應(yīng)用不適合,只適用于中小型應(yīng)用,而這類應(yīng)用,恰恰是移動(dòng)應(yīng)用和Web應(yīng)用的主流。
Flash、Silverlight和html5的比較分析
上面說(shuō)了,F(xiàn)lash有三個(gè)核心優(yōu)勢(shì):安裝基礎(chǔ)、統(tǒng)一的UI模型和跨平臺(tái)。
對(duì)于Silverlight來(lái)說(shuō),.Net在技術(shù)上比Flash更為成熟,不過(guò)缺陷在于安裝基礎(chǔ)和跨平臺(tái),這導(dǎo)致了Silverlight只能是Windows平臺(tái)上的移動(dòng)應(yīng)用和Web應(yīng)用的可選方案。
對(duì)于html5,需要詳細(xì)的分析:
(1)安裝基礎(chǔ):html5在移動(dòng)平臺(tái)上的安裝基礎(chǔ)比較高,但是在桌面上的安裝基礎(chǔ)還很弱;
(2)UI模型:html + css + js 比較成熟,雖然瀏覽器兼容問(wèn)題也客觀存在,但注意一下還是可以解決,js的話是個(gè)短板,它和C#,Java這種現(xiàn)代語(yǔ)言來(lái)說(shuō),生產(chǎn)力差距是明顯的,但如果要寫(xiě)大型應(yīng)用的話,可以用haXe這種萬(wàn)能語(yǔ)言來(lái)補(bǔ)充;
(3)跨平臺(tái):目前主要是跨移動(dòng)平臺(tái),桌面平臺(tái)的話,ie7,8的消滅還需要時(shí)日,對(duì)于中國(guó)來(lái)說(shuō),還得先干掉ie6。
html5最重要的優(yōu)勢(shì)是它不是私有技術(shù),受各大廠商歡迎。它的最重要的缺點(diǎn)有兩個(gè):
(1)性能:這個(gè)性能有兩個(gè)限制,第一個(gè)是由于是公開(kāi)的技術(shù),各種實(shí)現(xiàn)上的性能不一樣,js在不同平臺(tái)上性能差距10倍100倍是常事。移動(dòng)平臺(tái)不支持Flash是因?yàn)镕lash應(yīng)用在移動(dòng)瀏覽器上幾乎跑不動(dòng)。這并不表示Flash平臺(tái)比html5 平臺(tái)性能低下,反而目前,根據(jù)我的項(xiàng)目經(jīng)驗(yàn),flash平臺(tái)的性能要遠(yuǎn)遠(yuǎn)高出html5平臺(tái)的性能,且是數(shù)量級(jí)的差異。同等的Flash 2D應(yīng)用,如果用html5實(shí)現(xiàn)的話,在移動(dòng)平臺(tái)上的性能簡(jiǎn)直不忍目睹,即使是在桌面平臺(tái)上,IE9的Canvas有硬件加速,跑起來(lái)也還是顯得慢。當(dāng)然,這些會(huì)隨著時(shí)間發(fā)展慢慢完善,但是,想想多瀏覽器,等每個(gè)廠商都完善是個(gè)漫長(zhǎng)的過(guò)程。而對(duì)于私有技術(shù)來(lái)說(shuō),AIR 2.6在移動(dòng)平臺(tái)上慢得像蝸牛,僅僅翻了個(gè)年,AIR 2.7在移動(dòng)平臺(tái)上的性能就有了數(shù)量級(jí)的提升,這是私有技術(shù)的好處。第二個(gè)限制是js,js不是強(qiáng)類型的,這不利于大規(guī)模開(kāi)發(fā)和高性能開(kāi)發(fā),會(huì)成為瓶頸。對(duì)于前者,由于js非常靈活,我們可以通過(guò)haXe這類語(yǔ)言引入強(qiáng)類型,但高性能,卻是實(shí)打?qū)嵉膯?wèn)題。
(2)解決方案:出于發(fā)展初期,各種解決方案欠缺。
因此,未來(lái)的RIA可能三分天下:
◆ 50K以下的和50K以上的用戶眾多的非計(jì)算密集性應(yīng)用,html + js統(tǒng)治
◆ 50K-2M之間(Windows平臺(tái))、50K+(其它平臺(tái))Flash統(tǒng)治,并會(huì)在桌面和移動(dòng)應(yīng)用上有一塊不小的領(lǐng)地
◆ 2M之上的(Windows平臺(tái)),Silverlight統(tǒng)治
IT界,新的競(jìng)爭(zhēng)者總是出現(xiàn)在意想不到的地方升起。
原文:http://www.cnblogs.com/xiaotie/archive/2011/10/05/2199234.html
【編輯推薦】