DeviceCentral

主题位于:

为移动设备上的 Flash Lite 内容优化 ActionScript

由于大多数移动设备上都存在处理速度和内存的限制,因此,为移动设备上使用的 Flash Lite 内容开发 ActionScript 时应遵循下列准则:

  • 使文件及其代码尽可能简单。删除未使用的影片剪辑、删除不必要的帧和代码循环并避免使用过多或无关紧要的帧。

  • 使用 FOR 循环的成本可能很高,因为在每次迭代检查条件时,都会产生开销。如果迭代成本与循环开销不相上下,则应分别执行多次运算,而不是使用循环。代码可能较长,但性能会得到改善。

  • 一旦不再需要基于帧的循环,应立即将其停止。

  • 尽量避免字符串和数组处理,因为这类处理会占用大量 CPU 处理时间。

  • 始终尝试直接访问属性,而不要使用 ActionScript getter 和 setter 方法(使用这两种方法的开销比使用其他方法调用的开销更大)。

  • 合理地管理事件。在调用侦听器之前,通过使用条件来检查侦听器是否存在(不为 null),从而保持事件侦听器数组的紧凑性。通过调用 clearInterval 来清除任何活动间隔,并通过调用 removeListener 来删除任何活动侦听器之后,再使用 unloadapplicationremoveapplicationClip 删除内容。在卸载影片剪辑时,如果任何 ActionScript 函数仍引用 SWF 数据,则 Flash 不会回收 SWF 数据内存(例如,从间隔和侦听器回收)。

  • 当不再需要变量时,请将其删除或将其设置为 null,这会对其进行标记以便进行垃圾回收。由于删除变量的操作可从 SWF 文件中删除不需要的资源,因而有助于在运行时优化内存使用。删除变量比将变量设置为 null 更好。

  • 在进行垃圾回收之前,可通过调用 removeListener 从对象中显式删除侦听器。

  • 如果动态调用某个函数并传递一组固定参数,则应使用 call 来代替 apply

  • 使名称空间(如路径)更为紧凑以缩短启动时间。程序包中的每个级别将编译为一个 IF 语句并导致一个新的 Object 调用,因此减少路径中的级别可以节省时间。例如,具有 com.xxx.yyy.aaa.bbb.ccc.funtionName 级别的路径导致对象按照 com.xxx.yyy.aaa.bbb.ccc 进行实例化。一些 Flash 开发人员使用预处理器软件将路径简化成唯一的标识符(如 58923409876.functionName),然后再编译 SWF 代码。

  • 如果文件由多个使用相同的 ActionScript 类的 SWF 文件组成,则在编译期间将从所选的 SWF 文件中排除这些类。这有助于缩短文件下载时间,并降低运行时的内存需求。

  • 避免使用 Object.watchObject.unwatch,因为每次更改对象属性时,都要求播放器确定是否必须发送更改通知。

  • 如果在时间轴中的某个关键帧上执行 ActionScript 代码需要花费 1 秒多的时间才能完成,则可以考虑拆分此代码以便在多个关键帧上执行。

  • 在发布 SWF 文件时,从代码中删除 trace 语句。为此,在“发布设置”对话框中的“Flash”选项卡上选中“省略跟踪动作”复选框。

  • 继承会增加方法调用的次数并使用更多的内存:在运行时,包含其所需的所有功能的类比从超类中继承其部分功能的类具有更高的效率。因此在设计时,您可能需要在类的可扩展性和代码的效率之间找到一个平衡点。

  • 如果一个 SWF 文件载入另一个包含自定 ActionScript 类(例如,foo.bar.CustomClass)的 SWF 文件并在稍后卸载该 SWF 文件,相应的类定义将保留在内存中。要节省内存,可显式删除已卸载的 SWF 文件中的任何自定类。请使用 delete 语句并指定完全限定的类名称,如:delete foo.bar.CustomClass。

  • 限制对全局变量的使用,原因是在删除定义全局变量的影片剪辑之后,不会对这些全局变量进行标记以进行垃圾回收。

  • 避免使用标准用户界面组件(在 Flash 的“组件”面板中提供)。这些组件是为在桌面计算机上运行而设计的,并未针对在移动设备上运行而进行优化。

  • 尽量避免将函数嵌套太深。

  • 避免引用不存在的变量、对象或函数。与 Flash Player 的桌面版本相比,Flash Lite 2 查找对不存在的变量的引用的速度较慢,这可能会对性能产生显著影响。

  • 避免使用匿名语法定义函数。例如,myObj.eventName = function{ ...}。显式定义的函数具有更高的效率,例如 function myFunc { ...}; my Obj.eventName = myFunc;

  • 最大程度减少对 Math 函数和浮点数的使用。计算这些值会降低性能。如果必须使用 Math 例程,可以考虑预先计算这些值,并将其存储在变量数组中。在运行时,从数据表中检索这些值比让 Flash 计算这些值的速度要快得多。

有关创建移动电话和移动设备内容的更多技巧和方法,请参阅 www.adobe.com/go/learn_cs_mobilewiki_en