Flash平台应用性能优化官方文档摘要

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)。

Leave a Reply

Your email address will not be published. Required fields are marked *