|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
FlashPlayer是一款能够播放小又快速的多媒体动画,以及交互式的动画、飞行标志和用macromediaflash做出的图像。
poluoluo中心提醒:利用Apparat框架优化你的Flash.
出生背景
Adobe的Flash编译器(ASC,ActionScriptCompiler)体现得其实太“今天”了,加上Flash假造机在功能上另有很年夜的提拔空间,Flash良多时分被当作玩具大概被戏称为CPUhog。一样平常来讲,我们很少会手往工优化一个SWF,年夜多半情形下,它都能优秀地运转,可是当一个SWF文件尺寸过年夜招致加载工夫太长大概代码实行工夫太长招致帧频太低时,我们就必要思索对SWF举行优化了,比方代码的精简,静态资本(图片、视频等)的紧缩。可是手动优化发生的功能提拔非常无限,更多的优化义务本应当交给编译器来完成的,值得感谢的是,Apparat框架能够匡助我们从手动优化的恶梦中摆脱出来,不但云云,任何未经由优化的SWF都能从中失掉优化。Apparat的作者joaebert在Flash功能优化范畴有深入看法,往年的FlashAndTheCity年夜会上,joa的杰出事情为他博得了“2010年最天赋的Flash开辟者”和“2010年最出色的奉献者”两项年夜奖。
搭建情况
Apparat框架经由过程Scale写成,在理论它之前,必要先安装Scala2.8.0,Java1.6,别的7-zip的安装是可选的。搭建好这些基础的运转情况后(必要到场到PATH情况变量中),从GoogleCode可下载最新的安装包(今朝是1.0RC8)。下载后解压到新的文件夹,个中包括的文件有:
Apparat供应了良多命令行工具,好比tdsi,stripper,reducer等等,另有一些十分特别的ActionScriptAPI(存在于SWC文件中)。接上去我们来看看Apparat是怎样为Flash提速的。
优化字节码
Apparat的中心功效是TAAS(ThreeAddressActionScriptCompiler),TAAS不会改动任何一行ActionScript,它仅是利用一般的优化手艺就可以取得可不雅的功能提拔。分歧于Adobe的编译器ASC,Apparat是对编译过的SWF和SWC文件举行剖析,再构造和再拆卸。
Flash假造机AVM中的字节码是基于仓库的,这类布局难以再被优化,Apparat把基于仓库的字节码先转换成CFG(ControlFlowGraph),然后再经由过程CFG转换成无仓库的TAC(ThreeAddressCode)码,即TAAS(ThreeAddressActionScript)。
有了TAC/TAAS,就能够依据编译器优化手艺对Flash的字节码举行再度优化了,比方inlineexpansion,copypropagation,constantfolding,deadcodeelimination等等。
Apparat供应了几个有效的SWC文件,它们具有加倍高效的API,乃至也包括了ActionScript还没法利用的AlchemyAPI。利用了这些API的SWF经由Apparat处置以后,实行效力要年夜年夜提拔,其道理是Apparat对响应的代码做了内联(inline)优化。优化字节码的命令格局是:- tdsi-iinput.swf-ooutput.swf
复制代码 往除debug信息
Stripper命令能够往除SWF中一切的debug信息,而且该移除体例是平安的,即不会发生sideeffect,好比代码:- trace("thenextelementis:"+iter.next());
复制代码 经由Stripper以后会酿成:Stipper的命令格局是:- stripper-iinput.swf-ooutput.swf
复制代码 紧缩SWF
Reducer命令能够对嵌进在SWF中的PNG图片举行JPEG有损紧缩,一般对PNG图片举行100%品德的JPEG紧缩还能节俭必定的文件存储空间。该命令中有参数-q能够来设置紧缩质量,1.0暗示最高的紧缩品德,0.0暗示最低的紧缩品德。- reducer-iinput.swf-ooutput.swf-q0.8
复制代码 假如Reducer经由过程情况变量能找到7-zip,Reducer将会使用7-zip做进一步的紧缩,那末即便SWF中不包括图片我们也能今后命令中取得一些优化的余地,必要申明的是,今朝此功效只能感化于SWF,对SWC文件有效。
Adobe利用Deflate紧缩算法对SWF举行紧缩,经由过程Reducer能够接纳更先辈的LZMA紧缩算法,因为FlashPlayer不熟悉LZMA,以是经由LZMA紧缩后的SWF被嵌进在另外一个新的SWF中,新的SWF作为一个壳包括了原本的SWF和一个运转时解码器,今朝这个解码器也许在5KB摆布。利用LZMA紧缩也能够看作是做了(较弱的)代码搅浑。
在利用Reducer命令时加上参数-l能够启用LZMA紧缩:- reducer-iinput.swf-ooutput.swf-l
复制代码 除紧缩图片,Reducer还对代码举行了兼并,当链接内部的SWC时,每个ABC文件都具有一个常量池,Reducer能把一切的常量池兼并成一个,而且它还对常量举行了排序,如许频仍利用的常量会具有更小的开支。
经由我的测试与理论,利用Reducer过程当中有几点必要注重:
- 利用JPEG紧缩后的Flash大概在低版本的FlashPlayer上出现异常的色彩,以是紧缩后必要在低版本的FlashPlayer长进行检测。
- 启用LZMA很难到达文件尺寸的进一步削减,一般是增添了5KB,并且经由LZMA紧缩的SWF只能运转的FlashPlayer10及其以上版本上。
别的
以上3个命令是次要是针对SWF,SWC做进一步的优化,包含程序实行工夫的优化,图片尺寸的优化,SWF存储空间的优化,和debug信息的扫除。Apparat还包括别的一些风趣的功效,好比dump命令用来剖析SWF中的标签和输入UML图,jitb命令能够把SWF转换成Java字节码从而运转在JVM上(还在完美傍边)。
“fla”是Flash的原始档,只能用对应版本或更高版本的Flash打开编辑。 |
|