优化Flash性能(一)

在这篇文章中,你会学到优化Flash Professional应用性能的策略。优化过程包括编辑你的FLA工程文档确保发布的应用程序帧频可以满足动画的播放流畅。

如果你曾运行过一个Flash工程,见过播放总是停顿的动画,当然这种情况你非常不想看到。如果你想来做测验重现这种停顿的动画,可以创建一个有简单动画的工程,然后设置帧频为小于10的任意数字(例如5)。然后发布,可以看到这个动画有多么停顿了。

有两个主要因素可以决定Flash的性能:CPU或GPU[解释:图形处理器(Graphics Processing Unit) ]的使用和内存的使用。这些因素不是互相独立的。一些优化方法也许在这个方面可以提升性能,但是会对另一个方面有副作用。在下面的单元里,我会解释他们的工作原理,提供一些让你可以明确的做决定的原因,比如,为了降低CPU或GPU的加载而增加内存的使用。

如果你是为移动设备开发Flash游戏的,很可能你需要一些下面将要讨论的技术手段来达到可接受的帧频。如果你是开发桌面应用的(非游戏),很可能用很小的帧频就可以达到可接受的效果,或者不熟悉这篇文章里描述的技术也可以。

判断和衡量游戏性能

在理想的世界里,Flash的测试环境允许你模仿目标平台,然后根据目标平台的情况判断你的应用运行情况。不幸的是,除非你的开发平台和目标平台相似,否则现在还不能评估出在测试环境中你的项目的运行情况。

除非,你在开发环境中衡量你的应用性能,然后定期让它在目标平台中运行一下,确认它在目标平台也运行良好。

如何你在目标平台测试项目并发现问题,你可以用MT类来调试你的应用来解决问题。(在提供的例子文件文件夹内,打开位于这个目录的AS类:MT/com/kglad/MT.as。)

内存追踪,内存使用,和性能测试

MT代码改编自Damian Connolly,可以访问他的网站。这个MT类会打印出帧频、内存消耗,列出内存中存在的对象。为了更好使用MT类,遵循以下步骤:

1.导入MT类:

import com.kglad.MT;

2.在文档类里初始化它,或在项目的主时间轴上这样写:

MT.init(this,reportFrequency);

上面这行代码,“this”表示引用影片的主时间轴,“reportFrequency”表示一个有符号整数(这个数字是自己填的)。主时间轴的引用是用来计算和实现帧频的,reportFrequency是频率(以秒计算),它会跟踪一个Flash应用的帧频输出报告和内存数量的消耗。如果你不想定时输出帧频和内存报告数据,传0(或比0更小的数字)。即使你选择不输出帧频,你仍然运行了这个类的内存跟踪。

3.为了跟踪应用里你创建的对象,加上这句话:

MT.track(whatever_object,any_detail);

上面这行代码的第一个参数是你想跟踪的对象(看看它是否从内存中移除了),第二个参数是可选的字符串,它包含任何你想测试的东西。(有些开发人员会用这个参数得到特定对象是什么,在哪和或者存在的时间等细节。)

4.为了创建报告,显示你跟踪的对象是否还在内存里,加上这句话:

MT.report();

你没必要了解MT的代码,只管用就行了。但是,了解一些Dictionary类是如何存储所有传给MT.track()的弱引用也是好的。这个类里包括如何使用它的注释。

在这篇文章的开头提供了许多使用MT类的示例文件测试。为了更多的学习MT类,查看这些测试例子看看MT类是怎么用的。

就像物理里的观察者效应,我们观察帧频和(或者)内存,和(或者)跟踪内存,改变应用的帧频和内存使用情况。但是,如果观察输出结果比较少很可能观察的效果也会降低。此外,没有绝对的观察数字。每过一段时间调试和优化,改变帧频和/内存使用的情况才是最重要的。MT类很好的做到了承担追踪这些变化的责任。

为了降低因为频繁调用trace方法,而出现虚假的低帧频情况,MT类不允许每秒输出结果。(trace方法本身会降低帧频。)要十分注意这点,如果可以的话,你可以用textfield代替trace方法,来尽可能的消除调用trace方法给帧频带来的混淆影响。

在范例文件测试工程里,MT类是唯一的工具来检查内存使用和精确的内存问题。你也可以直接检查CPU或GPU的使用情况(查看执行应用程序时帧频的实际使用情况【就是看资源管理器】)。



发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

(Spamcheck Enabled)