[心得] AS3.0 效率优化

1.显示对象:1.1.静态的不需互动的图形,使用Shape对象。(eg:getSize(newShape())=236)
1.2.不需要时间轴的互动图形,使用Sprite对象。(eg:getSize(newSprite())=412)
1.3.需要使用时间轴的动画,使用MovieClip对象。(eg:getSize(newMovieClip())=440)

2.触发垃圾回收的方法:varcleanup:Shape=newShape;...cleanup=null;...cleanup=null;...cleanup=null;......
当系统认为内存使用不算多的情况下,运行时不会主动触发垃圾回收(对象删除,不一定会触发垃圾回收),这样就导致内存的释放在时间上是不可预知的;但内存 分配却可以触发垃圾回收。当垃圾回收器被触发后,垃圾回收器将在程序里查找未收集的可视化对象,并检查已查找到的所有未收集的可视化对象里的各个对象的引 用情况,进而检测出未被引用的非活动对象,之后会主动删除这部分非活动对象。

PS:
2.1.System.gc()可强制使用垃圾回收器回收非活动对象,但同时也停止除了SOCKET以外的所有操作。
2.2.image.Dispose();image=null;//立即释放。
2.3.System.disposeXML()可立即释放XML对象。

3.位图的滤镜效果本质:在内存中新增加一个进行滤镜后的效果图,然后将这张效果图显示出去,但原位图仍占用内存。因此,能使用PS等工具直接制作成效果图并加载,可省下这份内存,并减少在加载滤镜时的内存与CPU或GPU的占用。

PS:flashplayer10.1版本新增加了自动释放未过滤或未呈现到界面(如隐藏或放置到界面以外的区域)的原始位图功能(动态位图回收),需要不使用原位图30秒。但当要再次使用到原位图时,则需要重新加载。

4.尽可能地将显示对象的鼠标事件给关闭掉,尽可能地关闭事件的冒泡传递。

5.removeChild()并不能停止显示对象或回收显示对象(仅不显示而已),应尽可能地冻结显示对象。

6.vector比array的速度要快,同时固定了vector或Array的长度,则会更节省内存以及省时间。
Ps:不定长的vector或Array的对象,在每次变更其长度,均会在内存中重新复制原来的vector或array对象,然后再将原来的变量指向于新生产的clone对象。这会产生新的内存分配以及数据拷贝。另外,尽可能地使用原API会相对比较快与省内存。

7.当需要遍历array或vector时,尽可能使用COPY法,即item=vector;item.dosomework();....
PS:减少内联代码以减少内联函数的调用次数。内联的含义是只调用到对象内部的对象,比如vector.length,Math.PI等,应直接设置为外部变量。

8.尽可能地少使用alpha(alpha混合):因为占用CPU,特别是在叠加图层里,需要计算叠加后的颜色,则会占用CPU以及内存。

9.当非动画性界面时,可适当降低帧速率,但如需要保持流连接,不要小于4FPT。
PS:修改帧速率:Stage.frameRate/WindowedApplication.frameRate,但注意并不意味着应用会一直保持这个帧速率。

以下是一些常规指导,用于开始确定适用于不同类型活动的合适帧速率:
9.1.如果使用的是Flex框架,将起始帧速率保持为默认值(spark.components.WindowedApplication类会自动将backgroundFrameRate调整到至少为1帧/秒);
9.2.播放动画时,将帧速率设置为至少20帧/秒。通常不必超过30帧/秒。
9.3.不播放动画时,12帧/秒的帧速率可能就足够了。
9.4.系统以本机帧速率播放加载的视频,而与应用程序帧速率无关。如果视频是应用程序中唯一的移动内容,12帧/秒的帧速率。
可能就足够了。
9.5.如果应用程序没有输入焦点,5帧/秒的帧速率可能就足够了。
9.6.当AIR应用程序不可见时,2帧/秒或更低的帧速率可能就足够了。例如,如果应用程序已最小化或本机窗口的visible属性。
为false,则应用此指导。

10.播放影片或动画时,不要打开位图缓存。
10.1.对容器激活位图缓存会导致最终位图占用更多内存。
10.2.不在各个帧上旋转、缩放或更改缓存的内容,则位图缓存可提高呈现效果。但是,对于X和Y轴上的平移之外的任何转换,则不会提高呈现性能。在这些情况下,每次在显示对象上发生转换时,FlashPlayer都将更新缓存的位图副本。
10.3.更改alpha值会强制FlashPlayer在修改alpha值时更新内存中的缓存位图。
10.4.滤镜效果下,修改(x,y),则会重新生产位图(位图缓存种计算):滤镜依赖每次缓存的影片剪辑的播放头移动时更新的位图,每个帧都会强制FlashPlayer重绘位图。
10.5.位图的缩放,平移,旋转,使用bitmapdata的matrix会节省大量内存与CPU的占用。
10.6.在将矢量绘制为位图前后切换舞台品质是一项功能强大的技术,可以在屏幕上获得消除锯齿的内容。无论最终舞台品质如何,此技术都有效。EG:可通 过使用消除锯齿文本,甚至通过将舞台品质设置为LOW来获取消除锯齿的位图。使用cacheAsBitmap属性时不能实现此技术。不建议对处于运动状态 的文本应用此选项(可读性消除锯齿)。
PS:stage.quality=StageQuality.BEST;加载位图;stage.quality=StageQuality.LOW;
10.7.可将平移类的动画设置到一个函数中,减少平移动画时对函数的调用次数。如Event.ENTER_FRAME事件里



http://blog.sina.com.cn/s/blog_74f7ac930100uegv.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值