参考自官方的 《优化 Adobe Flash Platform 的性能》
1、非交互式简单形状,使用Shape对象。
2、不需要时间轴的交互式对象,使用Sprite对象。
3、尽可能重复使用对象而不是重新创建对象。
使用下面的代码,重复使用area对象。
4、尽量使用Array或Vector对象池来重用对象。
5、尽量少启动垃圾回收器。
当对象设置为null时,垃圾回收器会自动回收内存。一般当可用内存比较低时,才调用垃圾回收器。
另外要注意的是,在将对象设置为null时,先确保对象没有被使用(监听事件等)。
6、使用位图对象(BitmapData)有一个方法可以立即减少内存,当位图使用完之后,不会再使用时,直接调用idpose()方法,然后将位图对象设置为null。
7、避免使用滤镜。
将滤镜用于显示对象时,运行时将在内存中创建两个位图。尽可能使用Adobe Photoshop来模拟滤镜。
8、如果不使用显示对象,那么进行removerChild和removeEventListener操作。
9、通过舞台的Event.ACTIVATE 和 Event.DEACTIVATE 检测对象是否失去焦点,进行激活和停用对象。
10、当使用交互式对象(MovieClip或Sprite对象)时,运行时会检测并处理鼠标的交互。当屏幕上有多个交互对象,特别是重叠时,检测鼠标的交互会占用大量的CPU。所以在某一时刻,无需鼠标交互的对象禁用鼠标交互。mouseEnabled = false;和mouseChildrn = false;
11、使用动画,则在Enter_Frame中执行,不是动画,则使用计时器。
12、计时器的优化。
当有多个时间间隔操作,例如100毫秒执行一次和200毫秒执行一次,那么只使用一个计时器,而在计时器当中使用标记,判断执行哪些操作,而不要使用两个计时器。
13、在移动设备上,尽量不使用补间动画。
14、尽量使用Vctor类而不使用Array类。下面代码显示出来了两者的不同。
最后注意,当固定了矢量大小时,执行的效率会更高。var coordinates:Vector.<Number> = new Vector.<Number>(300000,ture);
15、绘制有路径的图时,使用drawPath和Vector。而不要使用moveTo、lineTo。
16、利用事件冒泡可以帮助优化代码的执行时间。
17、当String类方法可用时,它的运行速度比等效的正则表达式快且不需要创建其他对象。
18、使用TextField类的text属性时,使用appendText()方法,而不是 += 运算符。当最佳的方法是使用String对象来处理需要多次处理的文本控件,再传值给文本控件。
19、尽量避免使用Flex框架或任何大型第三方AS库。
20、尽量避免将显示对象放在后台,如果不使用就将他们从显示列表中删除。
21、使用alpha属性时,尽量避免使用alpha混合效果。
22、帧速率相关的优化。
如果是Flex框架,使用默认值。
如果有动画,20帧/秒~30帧/秒
不包括动画,12帧/秒。
应用程序最小化,则设置1帧/秒。