去除debug信息
Stripper命令可以去除SWF中所有的debug信息,并且該移除方式是安全的,即不會(huì)產(chǎn)生side effect,比如代碼:
trace("the next element is: " + iter.next());
經(jīng)過Stripper之后會(huì)變成:
(iter.next());
Stipper的命令格式是:
stripper -i input.swf -o output.swf
壓縮SWF
Reducer命令可以對(duì)嵌入在SWF中的PNG圖片進(jìn)行JPEG有損壓縮,通常對(duì)PNG圖片進(jìn)行100%品質(zhì)的JPEG壓縮還能節(jié)省一定的文件存儲(chǔ)空間。該命令中有參數(shù)-q可以來設(shè)置壓縮質(zhì)量,1.0表示最高的壓縮品質(zhì),0.0表示最低的壓縮品質(zhì)。
reducer -i input.swf -o output.swf -q 0.8
如果Reducer通過環(huán)境變量能找到7-zip, Reducer將會(huì)利用7-zip做進(jìn)一步的壓縮,那么即使SWF中不包含圖片我們也能從此命令中獲得一些優(yōu)化的余地,需要說明的是,目前此功能只能作用于SWF,對(duì)SWC文件無效。
Adobe使用Deflate壓縮算法對(duì)SWF進(jìn)行壓縮,通過Reducer可以采用更先進(jìn)的LZMA壓縮算法,由于Flash Player不認(rèn)識(shí)LZMA,所以經(jīng)過LZMA壓縮后的SWF被嵌入在另一個(gè)新的SWF中,新的SWF作為一個(gè)殼包含了原有的SWF以及一個(gè)運(yùn)行時(shí)解碼器,目前這個(gè)解碼器大概在5KB左右。使用LZMA壓縮也可以看做是做了(較弱的)代碼混淆。
在使用Reducer命令時(shí)加上參數(shù)-l可以啟用LZMA壓縮:
reducer -i input.swf -o output.swf -l
除了壓縮圖片,Reducer還對(duì)代碼進(jìn)行了合并,當(dāng)鏈接外部的SWC時(shí),每一個(gè)ABC文件都擁有一個(gè)常量池,Reducer能把所有的常量池合并成一個(gè),并且它還對(duì)常量進(jìn)行了排序,這樣頻繁使用的常量會(huì)具有更小的開銷。
經(jīng)過我的測(cè)試與實(shí)踐,使用Reducer過程中有幾點(diǎn)需要注意:
使用JPEG壓縮后的Flash可能在低版本的Flash Player上呈現(xiàn)異樣的色調(diào),所以壓縮后需要在低版本的Flash Player上進(jìn)行檢測(cè)。
啟用LZMA很難達(dá)到文件尺寸的進(jìn)一步減少,通常是增加了5KB,而且經(jīng)過LZMA壓縮的SWF只能運(yùn)行的Flash Player 10及其以上版本上。
其它
以上3個(gè)命令是主要是針對(duì)SWF,SWC做進(jìn)一步的優(yōu)化,包括程序執(zhí)行時(shí)間的優(yōu)化,圖片尺寸的優(yōu)化,SWF存儲(chǔ)空間的優(yōu)化,以及debug信息的清除。Apparat還包含其它一些有趣的功能,比如dump命令用來分析SWF中的標(biāo)簽以及輸出UML圖,jitb命令可以把SWF轉(zhuǎn)換成Java字節(jié)碼從而運(yùn)行在JVM上(還在完善當(dāng)中)。
本文鏈接:http://m.95time.cn/tech/web/2010/8098.asp
出處:口碑網(wǎng)UED Team
責(zé)任編輯:bluehearts
上一頁(yè) 使用Apparat框架優(yōu)化Flash [1] 下一頁(yè)
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|