我发现有用的文档是:
- 优化 Adobe Flash 平台的性能 http://help.adobe.com/en_US/as3/mobile/flashplatform_optimizing_content.pdf
- ActionScript 3.0 和 AVM2 性能调整(Gary Grossman) http://labs.jasonsturges.com/stack-overflow/as3-performance/AS3TuningInsideAVM2JIT.pdf
- 构建高性能 iPhone 应用程序作者:Mike Chambers http://www.mikechambers.com/files/presentations/fitc_amsterdam_2010/flash_iphone_fitc_2010.pdf
一些亮点:
选择合适的展示对象 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3-576ba64d124318d7189-8000.html
限制内存使用的最简单的优化技巧之一是
使用适当的类型显示对象 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html。对于简单的形状
不交互,使用Shape http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Shape.html对象。为了交互对象 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/InteractiveObject.html那不
需要一个时间表,使用Sprite http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Sprite.html对象。对于使用
时间线,使用影片剪辑 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/MovieClip.html对象。
Use getSize()对代码进行基准测试 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3-576ba64d124318d7189-7fff.html
getSize() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/sampler/package.html#getSize%28%29返回指定对象在内存中的大小。
选择适当的原始类型以节省内存 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3-576ba64d124318d7189-7fff.html
所有原始类型,除了String http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/String.html在内存中使用 4 - 8 个字节。 ANumber http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Number.html,表示一个 64 位值,由 分配 8 个字节
ActionScript 虚拟机 (AVM)(如果未分配值)。
String 类型的行为有所不同。基准代码和
确定任务最有效的对象。
重用对象 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3-576ba64d124318d7189-7ffe.html
通过重用对象来优化内存,并避免在任何时候重新创建它们
可能的。
使用对象池 http://help.adobe.com/en_US/as3/mobile/WS948100b6829bd5a6-19cd3c2412513c24bce-8000.html
重用对象减少了实例化对象的需要,这可以
昂贵的。它还减少了垃圾收集器的机会
正在运行,这可能会减慢您的应用程序的速度。
空闲内存 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3-576ba64d124318d7189-7ffc.html
为了确保一个对象是垃圾收集 http://www.adobe.com/devnet/actionscript/learning/as3-fundamentals/garbage-collection.html, 删除所有
对对象的引用。内存分配,而不是对象
删除,触发垃圾收集。尝试限制垃圾
集合通过尽可能地重用对象来传递。另外,设置
如果可能的话,引用 null,以便垃圾收集器
花费更少的处理时间来查找对象。想想垃圾
将集合作为保险,并始终管理对象的生命周期
如果可能的话,明确地。
将显示对象的引用设置为 null 并不能确保
物体被冻结。该对象继续消耗 CPU 周期,直到它
被垃圾收集。
位图数据 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html类包括一个dispose() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#dispose%28%29方法,虽然处置
方法从内存中删除像素,但仍必须设置引用
为 null 以完全释放它。
使用位图 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3-576ba64d124318d7189-7ffb.html
使用向量,尤其是大量使用向量,可以显着提高
需要 CPU 或 GPU 资源。使用bitmaps http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Bitmap.html是一个优化的好方法
渲染,因为运行时需要更少的处理资源
在屏幕上绘制像素而不是渲染矢量内容。
避免使用滤镜,包括通过 Pixel Bender 处理的滤镜 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3-576ba64d124318d7189-7ff8.html
当过滤器应用于显示对象时,运行时会创建两个
内存中的位图。使用外部创作的位图有助于
运行时以减少 CPU 或 GPU 负载。
使用 mipmap 缩放大图像 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3-576ba64d124318d7189-7ff7.html
谨慎使用 mipmap。虽然它提高了质量
缩小尺寸的位图,它会对带宽、内存和速度产生影响。
使用文本引擎读取只读文本,TextField用于输入文本 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3-576ba64d124318d7189-7ff5.html
对于只读文本,最好使用Flash 文本引擎 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/text/engine/package-detail.html, 哪个
提供低内存使用和更好的渲染。对于输入文本,文本域 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/text/TextField.html对象是更好的选择,因为 ActionScript 代码更少
需要创建典型的行为,例如输入处理和
自动换行。
使用回调而不是事件 http://help.adobe.com/en_US/as3/mobile/WS948100b6829bd5a6d20da321260fed8a52-8000.html
使用本机事件模型可能会更慢并且消耗更多内存
比使用传统的回调函数。事件对象必须是
在内存中创建和分配,这会导致性能下降。
例如,当听Event.ENTER_FRAME http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/Event.html#ENTER_FRAME事件,一个新的
在每个帧上为事件处理程序创建事件对象。
由于以下原因,显示对象的性能可能特别慢
捕获和冒泡阶段,如果显示器
清单很复杂。
在舞台上添加/删除对象时冻结和解冻对象 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-8000.html#WS4bebcd66a74275c36cfb8137124318eebc6-7ffc
即使显示对象不再位于显示列表中并且已存在
等待垃圾收集,他们可能仍在使用
CPU 密集型代码。
加载远程内容时冻结的概念也很重要
与 Loader 类。
unloadAndStop() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Loader.html#unloadAndStop%28%29方法允许您卸载 SWF 文件,
自动冻结加载的 SWF 文件中的每个对象,并强制
要运行的垃圾收集器。
Use Event.ACTIVATE and Event.DEACTIVATE用于检测后台不活动的事件 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-8000.html#WS948100b6829bd5a6-6752030e12905479288-8000
Event.ACTIVATE http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/Event.html#ACTIVATE and Event.DEACTIVATE http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/Event.html#DEACTIVATE事件允许您检测
当运行时获得或失去焦点时。结果,代码可以是
优化以对上下文变化做出反应。
激活和停用事件允许您实现类似的
有时在移动设备上发现“暂停和恢复”功能的机制
设备和上网本。
尽可能禁用鼠标交互 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-8000.html#WS948100b6829bd5a63821f6a2126681c5c57-8000
当许多交互式操作时,检测鼠标交互可能会占用大量 CPU 资源
对象显示在屏幕上,尤其是当它们重叠时。什么时候
可能的话,考虑禁用鼠标交互,这有助于您
应用程序使用更少的 CPU 处理,从而减少
移动设备上的电池使用情况。
对非动画内容使用计时器 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-8000.html#WS4bebcd66a74275c36cfb8137124318eebc6-7ffb
定时器优先于Event.ENTER_FRAME
非动画事件
长时间执行的内容。
计时器的行为方式与Event.ENTER_FRAME
事件,但是一个
可以在不依赖于帧速率的情况下调度事件。这
行为可以提供一些重要的优化。考虑一个视频
以播放器应用程序为例。在这种情况下,您不需要使用
高帧速率,因为只有应用程序控件在移动。
限制补间 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36cfb8137124318eebc6-8000.html#WS4bebcd66a74275c36cfb8137124318eebc6-7ffa
限制补间的使用,这可以节省 CPU 处理、内存和
电池寿命有助于内容在低端设备上更快地运行。
Use Vector vs. Array http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3a0f5f19124318fc87b-7fff.html
The Vector http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Vector.html类允许比类更快的读写访问Array http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html班级。
使用 Vector 时,数组元素访问和迭代要快得多
实例比使用数组时的实例要大。
在严格模式下,编译器可以识别数据类型错误。
运行时范围检查(或固定长度检查)增加
可靠性明显优于阵列。
使用绘图 API 加快代码执行速度 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3a0f5f19124318fc87b-7ffe.html
使用减少代码执行量drawPath() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html#drawPath%28%29,
drawGraphicsData() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html#drawGraphicsData%28%29, drawTriangles() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html#drawTriangles%28%29更少的行数
代码可以提供更好的ActionScript执行性能。
使用事件捕获和冒泡来最小化事件处理程序 http://help.adobe.com/en_US/as3/mobile/WS948100b6829bd5a67edfb831266c0b5fc6-8000.html
利用事件的冒泡可以帮助您优化
ActionScript 代码执行时间。您可以在以下位置注册事件处理程序
一个对象,而不是多个对象,以提高性能。
使用绘制像素setVector() method http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3a0f5f19124318fc87b-7ffd.html
绘制像素时,可以通过以下方式进行一些简单的优化
使用 BitmapData 类的适当方法。一个快速的方法
绘制像素是使用setVector() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#setVector%28%29 method.
lock() and unlock() BitmapData当使用慢速方法时,例如setPixel() or setPixel32() http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3a0f5f19124318fc87b-7ffd.html
Calling lock() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#lock%28%29 and unlock() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#unlock%28%29阻止屏幕更新
不必要的。迭代像素的方法,例如getPixel() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#getPixel%28%29,
getPixel32() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#getPixel32%28%29, setPixel() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#setPixel%28%29, and setPixel32() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#setPixel32%28%29,可能会很慢,
尤其是在移动设备上。如果可能,请使用检索方法
一次调用中的所有像素。要读取像素,请使用getVector() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#getVector%28%29方法,该方法比getPixels() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#getPixels%28%29方法。另外,请记住
尽可能使用依赖于 Vector 对象的 API
可能会跑得更快。
Use String类方法而不是正则表达式 http://help.adobe.com/en_US/as3/mobile/WS948100b6829bd5a6711168a01275489830e-8000.html
When a String http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/String.html类方法可用,它的运行速度比
等效的正则表达式并且不需要创建
另一个物体。
对于文本字段,使用apendText()而不是+=操作员 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3a0f5f19124318fc87b-7ffc.html
使用appendText() http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/text/TextField.html#appendText%28%29方法提供了性能改进。
方括号运算符[]会降低性能 - 将引用存储在局部变量中 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3a0f5f19124318fc87b-7ffc.html
使用方括号运算符会降低性能。你可以
通过将引用存储在局部变量中来避免使用它。
通过内联移动代码减少函数调用次数 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c3a0f5f19124318fc87b-7ffc.html
调用函数可能会很昂贵。尝试减少数量
通过内联移动代码来调用函数。
移动函数调用内联会导致代码超过四个
快几倍。
避免将内容放在舞台外 http://help.adobe.com/en_US/as3/mobile/WS948100b6829bd5a66f2268f12913a0c073-8000.html
即使舞台外的元素没有显示在屏幕上并且没有
渲染后,它们仍然存在于显示列表中。运行时间继续
对这些元素进行内部测试以确保它们是
仍在舞台外,用户没有与他们互动。
避免使用alpha财产 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36c11f3d612431904db9-7ffe.html
当显示对象使用alpha http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#alpha混合,运行时必须结合
每个堆叠显示对象和背景的颜色值
颜色来决定最终的颜色。因此,alpha 混合可以更
比绘制不透明的颜色需要占用更多的处理器资源。这个额外的
计算可能会损害慢速设备上的性能。
使用尽可能低的帧速率 http://help.adobe.com/en_US/as3/mobile/WS948100b6829bd5a61c0b0b612763986266-8000.html
较高的帧速率会消耗更多的 CPU 周期和能量
电池电量比较低。
Runtime code execution fundamentals http://help.adobe.com/en_US/as3/mobile/WS948100b6829bd5a61a52657a1274ff66899-8000.html
![elastic-racetrack](https://i.stack.imgur.com/YDqx7.png)
对复杂的矢量内容使用位图缓存 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36c11f3d612431904db9-7ffc.html
此功能缓存矢量对象,将其渲染为位图
在内部,并使用该位图进行渲染。位图缓存
如果缓存内容未旋转、缩放或未旋转,则可改进渲染
每一帧都发生变化。除翻译外的任何转换
x 轴和 y 轴,渲染效果没有改善。
Set cacheAsBitmapMatrix在移动 AIR 应用程序中使用缓存位图时的属性 http://help.adobe.com/en_US/as3/mobile/WS901d38e593cd1bac-11f566412b2b29517b-8000.html
cacheAsBitmapMatrix http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#cacheAsBitmapMatrix在 AIR 移动配置文件中,您可以应用任何
二维变换到对象而不重新生成
缓存的位图。您还可以更改 alpha 属性,而无需
重新生成缓存的位图。
Use BitmapData用于创建自定义位图缓存行为的类 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36c11f3d612431904db9-7ffb.html
仅使用单个缓存位图在内存中使用并由所有共享
实例。
隔离事件,例如Event.ENTER_FRAME在单个处理程序中 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36c11f3d612431904db9-7ffa.html
该技术可以节省CPU资源。
使用位图缓存功能和opaqueBackground属性以提高文本渲染性能 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36c11f3d612431904db9-7ff9.html
位图缓存功能允许您将矢量内容缓存为
位图以提高渲染性能。此功能有助于
复杂的矢量内容,以及与文本内容一起使用时
需要处理才能呈现。
Alpha 透明度会给运行时带来额外的负担
绘制透明位图图像。您可以使用opaqueBackground http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#opaqueBackground属性来绕过它,通过指定
颜色作为背景。
启用GPU硬件图形加速 http://help.adobe.com/en_US/as3/mobile/WS948100b6829bd5a6-54120f1012593d8f030-8000.html
为了利用 AIR 的 Flash 内容的 GPU 加速
移动平台,Adobe 建议您使用渲染模式=“直接” http://help.adobe.com/en_US/air/build/WSfffb011ac560372f2fea1812938a6e463-8000.html#WSfffb011ac560372f2fea1812938a6e463-7fe3(即 Stage3D)而不是 renderMode="gpu"。 Adobe 官方
支持并推荐以下内容Stage3D http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Stage3D.html基于框架:椋鸟 (2D) http://gamua.com/starling/ and 远离3D (3D) http://away3d.com/.
避免使用wmode=透明或wmode=不透明 http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7a92.html在 HTML 中嵌入
参数。这些模式可能会导致性能下降。他们能
也会导致音频和视频同步的轻微损失
软件和硬件渲染。此外,很多平台并没有
当这些模式生效时支持 GPU 渲染,显着
损害性能。
倾向于使用异步版本的操作 http://help.adobe.com/en_US/as3/mobile/WS948100b6829bd5a6-4c2e64612754b0a95b-8000.html
当前执行线程中的应用程序代码继续执行。
异步操作被调度和划分以避免渲染
问题。因此,更容易获得响应式
使用异步版本操作的应用程序。看感知
性能与实际性能 http://help.adobe.com/en_US/as3/mobile/WS948100b6829bd5a61a52657a1274ff66899-7fff.html了解更多信息。
平滑形状以改善渲染 http://help.adobe.com/en_US/as3/mobile/WS948100b6829bd5a6441c2d912897db4bb0-8000.html
与位图不同,渲染矢量内容需要大量计算,
特别是对于包含许多控制的渐变和复杂路径
点。作为设计师或开发人员,请确保形状符合
足够优化。
加载资源后在本地缓存资源,而不是每次需要时从网络加载它们 http://help.adobe.com/en_US/as3/mobile/WS948100b6829bd5a61596760212754e435e6-8000.html
如果您的应用程序加载媒体或数据等资产,请缓存
将资产保存到本地设备。对于发生变化的资产
偶尔,请考虑定期更新缓存。
Use the StageVideo利用硬件加速的类 http://help.adobe.com/en_US/as3/mobile/WS4ab7a0c759d40da6134889a212da4f4ee32-8000.html
Use the 舞台视频 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/StageVideo.html类利用硬件加速
呈现视频。
这种方法充分利用了底层视频硬件。
结果是 CPU 上的负载大大降低,这意味着
功能较弱的设备上的帧速率较高,内存也较少
用法。
在同等比特率下,AAC 音频格式比 mp3 格式提供更好的质量和更小的文件大小 http://help.adobe.com/en_US/as3/mobile/WS4bebcd66a74275c36ffa41af1243193910f-7ffc.html
与视频解码类似,音频解码需要较高的 CPU 周期,并且
可以通过利用设备上的可用硬件进行优化。
AAC 格式比 AAC 格式提供更好的质量和更小的文件大小
具有同等比特率的 mp3 格式。
最小化构造函数中的代码 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Object.html#constructor
初始化函数如构造函数 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Object.html#constructor被解释,
其他一切都是 JIT。