您的位置:首页 > 编程语言

运行时代码执行基本原理

2011-10-26 18:02 190 查看
了解如何改进应用程序性能的关键是了解 Flash Platform 运行时如何执行代码。运行时在一个循环中运行,其中某些操作是针对每个“帧”发生的。在这种情况下,帧只是由为应用程序指定的帧速率决定的一段时间。分配给每个帧的时间直接对应于帧速率。例如,如果指定帧速率为 30 帧/秒,则运行时会尝试使每个帧的执行时间为三十分之一秒。

可以在创作应用程序时指定初始帧速率。可以使用 Adobe® Flash® Builder™ 或 Flash Professional 中的设置来设置帧速率。还可以在代码中指定初始帧速率。可通过对根文档类应用[SWF(frameRate="24")] 元数据标签,在纯
ActionScript 应用程序中设置帧速率。在 MXML 中,可在 Application 或 WindowedApplication 标签中设置 frameRate 属性。

每个帧循环包括两个阶段,分为三部分:事件、enterFrame 事件和呈现。

第一阶段包括两部分(事件和 enterFrame 事件),这两部分都可能会导致调用代码。在第一阶段的第一部分,发生并调度运行时事件。这些事件可以表示异步操作完成或异步操作的进度,例如来自通过网络加载数据的响应。还包括来自用户输入的事件。调度事件时,运行时在您已注册的侦听器中执行代码。如果没有发生事件,运行时会等待完成此执行阶段,而不会执行任何动作。由于缺少活动,运行时永远不会提高帧速率。如果在执行周期的其他部分发生事件,运行时将这些事件排队并在下一个帧中进行调度。

第一阶段的第二部分是 enterFrame 事件。此事件与其他事件不同,因为每个帧始终只调度一次该事件。

调度所有事件后,帧循环的呈现阶段开始。此时,运行时将计算屏幕上所有可见元素的状态并将其绘制到屏幕上。然后,此进程重复,就像赛跑者围绕跑道奔跑。

注: 对于包括 updateAfterEvent 属性的事件,可强制立即执行呈现操作,而不是等到呈现阶段。但是,如果 updateAfterEvent 频繁导致性能问题,应避免使用它。

最简单的方法是假设帧循环中的两个阶段需要相同的时间。在这种情况下,一半的时间运行帧循环事件处理函数和应用程序代码,另一半的时间发生呈现。但是,事实通常是不同的。有时,应用程序代码会通过增加运行时间并减少用于呈现的时间来占用帧中多一半的可用时间。在其他情况下,特别是对于滤镜和混合模式等复杂的可见内容,呈现需要一半以上的帧时间。由于各阶段需要的实际时间是灵活的,所以帧循环常称为“弹性跑道”。

如果帧循环的组合操作(代码执行和呈现)所需时间太长,运行时将无法保持帧速率。帧会进行扩展,所需时间超过其分配的时间,因此在触发下个帧之前会出现延迟。例如,如果一个帧循环需要的时间超过三十分之一秒,则运行时不能以每秒三十帧的速度更新屏幕。如果帧速率减慢,将影响体验效果。最乐观的情况是动画断断续续。如果情况更糟糕,应用程序将冻结,并且窗口一片空白。

有关 Flash Platform 运行时代码执行和呈现模型的详细信息,请参阅下列资源:

Flash
Player Mental Model - The Elastic Racetrack(文章作者:Ted Patrick)

Asynchronous ActionScript
Execution(文章作者:Trevor McCauley)

优化 Adobe AIR 的代码执行、内存和呈现(网址为 http://www.adobe.com/go/learn_fp_air_perf_tv_cn)(由
Sean Christmann 撰写的 MAX 会议演示文稿的视频)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐