Actionscrip3.0 性能优化 自己总结

来源:互联网 发布:软件开发分工界面 编辑:程序博客网 时间:2024/06/03 19:08

性能优化无非是这几个方面出发:内存,网络交互,减少CPU使用,呈现速度,提高AS3性能(前三点对所有语言通用,后面两点依情况而定)。

一 . 优化内存

(一). 要限制内存使用量,最简单的就是使用合适类型的显示对象。能用shape不用sprite,能用sprite不用movieClip,等等。

(二). 选择合适的数据类型。能用uint不用int,能用int不用number。

(三).尽可能的重复使用对象,而不是创建对象(对象池,不要在for中创建对象)

(四)释放内存,删除对对象的所有引用以确保出发垃圾回收

垃圾回收进程会占用大量CPU并影响性能,通过重复使用对象,尝试限制垃圾回收。尽可能将引用设置为null(设置为null之前先停用该对象,否则该对象任将占用CPU),以便垃圾回收器用较少处理时间来查找对象。

(五)对于不再使用的BitmapData,调用dispose()方法并将引用设置为null释放内存。

(六)尽可能少的使用滤镜(AS3的滤镜:斜角滤镜,模糊滤镜,投影滤镜,发光滤镜,渐变斜角滤镜,渐变发光滤镜,颜色矩阵滤镜,卷积滤镜,置换图滤镜,也就是各种Filter类)

(七)尽量少使用mip映射(这个玩意我也没用过,只是知道)

(八)避免使用3D属性,特别是在移动平台上


二. 优化CPU

(一).从显示列表删除一个对象,并将其引用设置为null不能确保该对象时冻结的,如果不运行垃圾回收器则该对象将继续占用CPU和内存

(二).调用Loader类的unloadAndStop()来SWF文件,自动冻结加载的SWF文件中的每个对象并强制运行垃圾回收器

(三).Event.ACTIVE和Event.DEACTIVE检查后台是否处于非活动状态,并相应的优化程序(例如:FlashPlayer失去焦点时将帧频设置为0)

(四).尽可能考虑禁用鼠标交互,检测鼠标交互会占用大量CPU

(五).对于时间太长的非动画内容,优先选用计时器,而不是Event.ENTER_FRAME事件

(六).尽量不要再for中计算表达式,包括数组,向量的长度


三.Actionscript3.0性能

(一).Vector比Array快,尽可能用Vector,如果可以指定长度,则指定Vector的长度,这样更快

(二).执行更少的代码(多个lineTo和drawPath,drawPath更快)

(三).尽可能依赖于Vector的API,因为他们的运行速度可能更快

(四).尽可能少的使用中括号运算符,使用中括号运算符可能会降低性能

重要:代码大小对播放器的整体执行情况有很大的影响。如果应用程序包含大量Actionscript3.0代码,则虚拟机将花费大量时间验证代码和JIT编译(just in time,运行时需要代码时,将中间语言转换为机器码的编译)。属性查找的速度可能较慢,原因在于继承层次较深且内部缓存容易失败。要降低代码大小,请避免使用Flex框架,TLF框架和任何第三方大型Actionscript库


四.呈现性能

使用flash.profiler.showRedrawRegions ( true, 0x0000FF )打开重绘区域

(一).要改进性能将显示对象的visible设置为false或者从显示列表中移除,并停止其时间轴

(二).尽可能避免将对象放在后台,而应该将他们从显示列表删除

(三).使用适当的舞台品质设置可提高呈现性能(移动设备用StageQuality.LOW ,StageQuality.MEDIUM足够,桌面默认是HIGH。因为桌面DPI大约为100,移动设备DPI大约200)

(四).尽可能避免是用alpha属性

(五).使用尽可能低的帧频,动态更改帧频,提高性能。

(六).对复杂的矢量内容使用位图缓存(具体参见我的博客,Actionscript3.0性能优化(二))。

待续。。。。。

原创粉丝点击