zoukankan      html  css  js  c++  java
  • Flash代码执行原理与性能优化笔记

    一. 执行基本原理

      Flash平台运行时在一个循环中执行,它以划分的“帧”为单位进行处理。于是帧速率即对应着分配给每个帧的时间,如指定帧速率为20帧/秒,则运行时会尝试对每个帧执行1/20秒。即使在时间轴上不存在可以多个帧,单一帧所表现的SWF内容也会被周期性地进行处理。 帧的执行又可划分为2个阶段:

    (1)ActionScript 代码的执行(经由 ActionScript Virtual Machine)

    (2)显示对象(DisplayObject)的呈现

                                                                    

      如果需要执行的代码是要进行比较耗费CPU的密集型计算,那么以上Idle的空闲时间就会被占用掉。帧之间需要用作画图呈现的时间就会被延长,相应的回放帧的速率就会变慢:


      因为ActionScript中没有提供多线程的机制进行处理,此时代码运行以及界面绘图的任务需要在单一线程中完成。实际上Actionscript 把耗费CPU的计算分成了各个更小而且独立的段,使之在跨越多个帧的时候也能独立执行。在划分的各个段之间就可以重绘呈现出界面,使后续帧的播放不受打断:

    二. 性能优化措施

    (1) ActionScript3的资源管理

        Grant Skinner 在其Blog的AS3资源管理系列文章中已经较为详细的介绍了FlashPlayer的GC工作原理,以及资源管理时可能出现的问题等。强烈推荐感兴趣的园友可以仔细研究下。

    (2)性能改进的办法

    1. 利用FlashBuilder的Profile工具发现瓶颈的区域。

    2. 重用对象

    在涉及到不断重复使用对象时,考虑利用对象池处理。在初始化阶段先创建一定数量的对象并将其存储到一个容器(Array / Vector)对象中。在对象完成操作后,可清除对象的相互引用防止其仍然执行占用CPU(注意不要将对象的引用置为null)。然后把对象放入池中,再次用到时直接从池中检索即可。

    3. 注册事件监听器时利用弱引用

    addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false)

    4. 移除已经注册的对应的事件监听器。

    5. 自定义的显示对象在重绘之前对引用到的Graphics调用clear()方法,清除先前所画的部分。

  • 相关阅读:
    正则表达式学习网站
    Longest Substring Without Repeating Characters
    保留小数点后几位数字
    ReentrantLock和synchronized的区别随笔
    范型 小编
    两个线程交替打印字符串
    Gray Code
    Ajax
    堆排序
    Clone Graph
  • 原文地址:https://www.cnblogs.com/raywalker/p/1912235.html
Copyright © 2011-2022 走看看