誕生背景
Adobe的Flash編譯器(ASC, ActionScript Compiler)表現(xiàn)得實(shí)在太“昨天”了,加上Flash虛擬機(jī)在性能上還有很大的提升空間,F(xiàn)lash很多時(shí)候被當(dāng)做玩具或者被戲稱為CPU hog。一般來說,我們很少會手去工優(yōu)化一個(gè)SWF,大多數(shù)情況下,它都能良好地運(yùn)行,但是當(dāng)一個(gè)SWF文件尺寸過大導(dǎo)致加載時(shí)間過長或者代碼執(zhí)行時(shí)間過長導(dǎo)致幀頻過低時(shí),我們就需要考慮對SWF進(jìn)行優(yōu)化了,例如代碼的精簡,靜態(tài)資源(圖片、視頻等)的壓縮。但是手動(dòng)優(yōu)化產(chǎn)生的性能提升很是有限,更多的優(yōu)化任務(wù)本應(yīng)該交給編譯器來完成的,值得感激的是,Apparat框架可以幫助我們從手動(dòng)優(yōu)化的噩夢中解脫出來,不僅如此,任何未經(jīng)過優(yōu)化的SWF都能從中得到優(yōu)化。Apparat的作者joa ebert在Flash性能優(yōu)化領(lǐng)域有深刻見解,今年的FlashAndTheCity大會上,joa的出色工作為他贏得了“2010年最天才的Flash開發(fā)者”和“2010年最杰出的貢獻(xiàn)者”兩項(xiàng)大獎(jiǎng)。
搭建環(huán)境
Apparat框架通過Scale寫成,在實(shí)踐它之前,需要先安裝Scala 2.8.0,Java 1.6,另外7-zip的安裝是可選的。搭建好這些基本的運(yùn)行環(huán)境后(需要加入到PATH環(huán)境變量中),從Google Code可下載最新的安裝包(目前是1.0RC8)。下載后解壓到新的文件夾,其中包含的文件有:
Apparat提供了很多命令行工具,比如tdsi, stripper, reducer等等,還有一些非常特殊的ActionScript API(存在于SWC文件中)。接下來我們來看看Apparat是如何為Flash提速的。
優(yōu)化字節(jié)碼
Apparat的核心功能是TAAS(Three Address ActionScript Compiler),TAAS不會改變?nèi)魏我恍蠥ctionScript,它僅是使用普通的優(yōu)化技術(shù)就能獲得可觀的性能提升。不同于Adobe的編譯器ASC,Apparat是對編譯過的SWF和SWC文件進(jìn)行分析,再組織和再裝配。
Flash虛擬機(jī)AVM中的字節(jié)碼是基于堆棧的,這種結(jié)構(gòu)難以再被優(yōu)化,Apparat把基于堆棧的字節(jié)碼先轉(zhuǎn)換成CFG(Control Flow Graph),然后再通過CFG轉(zhuǎn)換成無堆棧的TAC(Three Address Code)碼, 即TAAS(Three Address ActionScript)。
有了TAC/TAAS, 就可以根據(jù)編譯器優(yōu)化技術(shù)對Flash的字節(jié)碼進(jìn)行再度優(yōu)化了,例如inline expansion, copy propagation, constant folding, dead code elimination等等。
Apparat提供了幾個(gè)有用的SWC文件,它們擁有更加高效的API,甚至也包含了ActionScript還無法使用的Alchemy API。使用了這些API的SWF經(jīng)過Apparat處理之后,執(zhí)行效率要大大提升,其原理是Apparat對相應(yīng)的代碼做了內(nèi)聯(lián)(inline)優(yōu)化。優(yōu)化字節(jié)碼的命令格式是:
tdsi -i input.swf -o output.swf
出處:口碑網(wǎng)UED Team
責(zé)任編輯:bluehearts
上一頁 下一頁 使用Apparat框架優(yōu)化Flash [2]
◎進(jìn)入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評論。
|