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事件里
原文地址:https://www.cnblogs.com/lancidie/p/3396308.html