1. 关于存储
- 使用适当的Display Object
- Shape – 没有交互(占内存少)
- Sprite – 有交互(占内存多)
- MovieClip – 有时间线(占内存更多)
- 尽可能重用对象,而不要重新创建
- 强制类型转换int(exp)要比Math.floor()和Math.ceil()快很多
- 使用对象池技术重用对象
- 释放内存 – 将所有对象的引用设置为null
- 尽可能重用BitmapData
- Callback要比event快而且消耗更少的内存
2. 减少CPU使用率
- 即便将一个Display Object从stage上移除了(removeChild)甚至是已经将它的引用设置为null,它依然有可能在消耗CPU。所以要在其移出display list时将其完全停下来(比如mc.stop())。
- 卸载从外部装载的内容时,使用loader.unloadAndStop(),而不要使用loader.unload()。
- 尽可能禁用鼠标交互。obj.mouseEnabled = false; obj.mouseChildren = false;
- Timer在某些情况下比ENTER_FRAME要好。
- 减少tweening的使用。
3. ActionScript性能
- 尽 可能使用Vector替代Array。固定长度的Vector更快。(Vector可以这样初始化:var coords:Vector.<Number> = Vector.<Number>([132, 20, 46, 254, 244, 100, 20, 98, 218, 254]);)
- 新的drawing API更快,它们是:drawPath, drawGraphicsData, drawTriangles。
- 使用setVector()方法来处理像素。
- 使用setPixel()和setPixel32方法时,要配合使用lock()和unlock()方法。
- 使用TextField时,appendText()方法比+=操作符要快。
- 尽可能在避免在循环内更新TextField。
- 尽可能少使用方括号操作符访问Vector或Array元素,可以利用一个临时变量来操作。
- 尽量将代码内嵌,避免过多的函数调用。(比如用 value > 0 ? value : -value; 来代替Math.abs())
- 代码量过大也会造成性能的降低。尽量少使用大型第三方库(Flex, TLF)。
- 避免在循环内使用evaluating statements(myArray.length)。用临时局部变量来操作。
- 更多优化技巧参考:http://www.rozengain.com/blog/2007/05/01/some-actionscript-30-optimizations/
4. 渲染性能
- 尽可能避免使用alpha参数。
- 适当的使用cacheAsBitmap可以大幅提高性能。(对于变化少的矢量元件)
- 针对每个子元件使用cacheAsBitmap而不是针对父元件使用。
- 使用TextLine处理静态文本比TextField快而且使用更少的内存。
- 使用cacheAsBitmap和opaqueBackground参数可以改进渲染性能(包含TextField)。