`
17studio
  • 浏览: 193972 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

整理完了公司的actionscript客户端优化方案

阅读更多
幸好有thor指点,少走了很多的弯路

发现问题的手段还是需要全面的测试和细心的观察

优化的手段是界面和使用资源的优化,这点在很多情况下都是大同小异的

下面是adobe建议的优化要点,记一下以免丢失,flashlite和flash应该有共通之处

优化 ActionScript 性能

由于大多数移动设备在处理速度和内存方面都有一定的限制性,因此在开发适用于移动电话中使用的 Flash Lite 内容的 ActionScript 时,请遵循以下原则:
使 ActionScript 尽量简单。
限制使用的循环数和每个循环包含的代码数。
当不再需要基于帧的循环时,应当立即停止该循环。
尽量避免字符串和数组处理,因为这对 CPU 的消耗很大。
始终尝试直接访问属性,而不要使用 ActionScript getter 和 setter 方法,因为与其它方法调用相比,这两种方法需要更高的开销。
巧妙并更为具体地管理事件。在调用侦听器之前利用一些条件来检查侦听器是否存在(不为 null),以此来使事件侦听器数组更加简洁。
不再需要变量时,请删除变量或将变量设置为 null。这样做可以标记数据,以便进行垃圾回收。删除变量有助于在运行期间优化内存使用情况,因为从 SWF 文件中删除了不需要的资源。删除变量比将变量设置为 null 更好。

有关垃圾回收和内存管理技术的更多信息,请参见管理应用程序的内存。
在进行垃圾回收前,通过调用 removeListener() 从对象中显式删除侦听器。
如果动态调用函数并传递固定的一组参数,则请使用 call(),而不要使用 apply()。
尽量使命名空间(如路径)简短以节省启动时间。包中的每个级别均会被编译为一个 IF 语句,并导致一个新的 Object() 调用,因此路径中的级别较少可以节省时间。

例如,具有 com.xxx.yyy.aaa.bbb.ccc.functionName() 级别的路径会使一个对象针对 com、xxx、yyy、aaa、bbb 和 ccc 被实例化。有些 Flash 开发人员使用预处理器软件,在编译 SWF 之前,将路径简化为一个唯一标识符,如 58923409876.functionName()。
如果应用程序由多个使用相同 ActionScript 类的 SWF 文件组成,则可以在编译过程中从选择的 SWF 文件中排除这些类。这样有助于缩短应用程序的下载时间和降低运行时内存要求。有关更多信息,请参见从编译过程中排除类。
避免使用 Object.watch() 和 Object.unwatch(),因为对象属性的每次更改都要求播放器确定是否必须发送更改通知。
如果在时间轴中的关键帧上执行的 ActionScript 代码需要 1 秒以上方可完成,则应考虑分割该代码,使其在多个关键帧上执行。
在发布 SWF 文件时从代码中删除 trace() 语句。为此,在"发布设置"对话框的"Flash"选项卡上,选择"省略跟踪动作"复选框。
继承会增加方法调用的数量,而且会使用更多的内存:包括所需全部功能的类在运行时要比从超类继承某些功能的类更加有效。因此,您可能需要在类的扩展性和代码有效性间做出一定的设计取舍。
当一个 SWF 文件加载另一个包含自定义 ActionScript 类(例如 foo.bar.CustomClass)的 SWF 文件,然后再卸载该 SWF 文件时,该类定义仍将保留在内存中。为了节省内存,应显式删除已卸载 SWF 文件中的所有自定义类。可以使用 delete 语句,然后指定完全限定类名,如下面的示例所示:
delete foo.bar.CustomClass
限制全局变量的使用,因为如果删除了定义全局变量的影片剪辑,这些全局变量就不会被垃圾回收。
避免使用标准用户界面组件(在 Flash Professional 8 的"组件"面板中提供)。这些组件设计用于在桌面计算机上运行,并未针对在移动设备上运行而优化。
尽量避免深层嵌套函数。
避免引用不存在的变量、对象或函数。与桌面版本的 Flash Player 相比,Flash Lite 2.0 在查找对不存在的变量的引用时速度非常缓慢,这会显著影响应用程序的性能。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics