辅助功能*

Flash Player 文章

 

Flash Player 8 的性能改进


Emmy Huang

Emmy Huang

Adobe

出版日期:
26 September 2005
用户级别:
全部

也许它不像 alpha 视频或阴影滤镜特效那么有吸引力,但您可以立即从 Macromedia Flash Player 8 的改进性能中受益—不需要做任何事情。全新的垃圾收集机制是对整体性能改进贡献最大的成员之一,它改进了 ActionScript 执行,同时还减少了播放器的内存使用。

此外,Flash Player 8 的几个特定于 Macintosh 平台的更改所得到的结果是 Windows 和 Macintosh 的性能更加类似。有了这些更改后,在查看内容和应用时,您可以看到 Flash Player 8 的总体性能竟提高了 50%。

新垃圾收集器带来的巨大性能增强

Flash Player 8 中的新垃圾收集器是 ActionScript 执行的性能增强和减少的内存使用的主要驱动力。随着 Flash 应用大小和复杂性的提高,Flash Player 7 中用于垃圾收集的引用计数算法已经不能满足要求。通过从简单的引用计数转换到延迟引用计数,我们消除了 Flash Player 中 90%以上的引用计数。

Flash Player 7 中引用计数的开销大约是总体执行时间的 20%,这经常会导致大型应用出现渲染暂停。新的垃圾收集器将此项开销减少为只占总执行时间的 1–2%!

Flash Player 8 还使用增量垃圾收集方法,这种方法可以中断将对象标记为删除的操作和实际删除步骤,以便只要有空闲周期就可以运行它们。

因为有效的垃圾收集和内存使用是直接相关的,因此 Flash Player 8 使用的内存大约比 Flash Player 7 少了 50%。Flash Player 7 中使用的垃圾收集方法导致了几乎是线性的内存使用。相反,使用增量收集方法后,Flash Player 8 中的内存使用的执行更像一个阶梯函数,因为在空闲周期中,有大量的内存被定期释放出来(请参考图 1)。

示例测试期间的 Windows 内存使用图

图 1。 示例测试期间的 Windows 内存使用图

(+) 放大

对于在 Mac OS X 上进行的相同测试,所执行的垃圾收集稍有不同:Flash Player 主要是在最后释放内存(请参考图 2)

示例测试期间的 Mac OS 内存使用图

图 2。示例测试期间的 Mac OS 内存使用图

(+) 放大

新的垃圾收集器和更低的内存消耗所带来的结果是,在 Flash Player 8 中运行时,大多数现有内容在速度上都会有所提高—不需要进行任何重新编译。

当然,您可以创建在 Flash Player 8 中运行的更慢的电影

尽管您的内容和应用的总体性能将会改进,但对于某些具体的方面,新的垃圾收集器会产生一些性能副作用。与 Flash Player 7 中的相同操作相比,一些操作会变快,而有些操作会变慢,这是因为支持内存管理的底层基础架构发生了变化。结果是,实际上不能使用对功能的某个特定方面进行度量的 microbenchmark 测试或小的基准测试,来在以前的播放器版本和 Flash Player 8 之间进行同类比较。

例如,假设有一个 microbenchmark 测试,它计算方程式以运用某些数学例程,而且您在播放器的一行中将其运行了 5 次。在 Flash Player 7 中,它需要用 300 毫秒的时间来计算。这一测试在随后的每次运行上也都需要花费 300 毫秒的时间。借助 Flash Player 8 中的垃圾收集机制,这一相同的 microbenchmark 测试可能在第一次需要 310 毫秒,下一次需要 300 毫秒,时间依次递减。第一次运行可能比在 Flash Player 7 中慢,但随后的运行将会变快,结果是总体平均速度要比在 Flash Player 7 中快。

本章末尾提供了一组 Flash Player microbenchmark 测试和结果的示例。改进性能的主要目的是改进总体应用的性能,而不一定是改进每个 microbenchmark 的性能。可以使用 Microbenchmark 测试证实我们所做的更改并未减慢运行速度,但需要注意的重要事情是,我们还在测试套件中添加了引用应用基准,旨在实现如何影响总体性能的更完整的测试。

使其在 Mac 上成为现实

对于此次发布的产品,我们在 Mac 的播放器性能上倾注了大量的时间和精力,以使 Windows 和 Mac OS 的性能在所有方面都更加相似,并提高稳定性。一个最大的改动就是重写了 Mac 插件,以使用新的“Mach-O”OS X 运行时体系架构,该架构能够使播放器直接利用该平台的新技术和功能。我们还花费了大量时间针对 Mac 优化了核心渲染例程。

为了改进视频和大量内容的播放效果并降低 CPU 的使用率,当 Flash Player 8 在 Safari 以及更高版本(在 Mac OS X 10.2)中运行时使用了一些 OpenGL 功能。这并不是完全支持 OpenGL;播放器利用具体的功能使屏幕上的位速率变得更快。使用 OpenGL 改进了视频播放和动画,并减少了令人讨厌的水平刷新线。

与垃圾收集中的更改类似,该功能改进了在 Safari 中渲染的总体性能;然而,在某些情况下性能可能会下降。OpenGL 还有一些内置的限制,并且在以前的较慢系统上,Mac OS X 将把帧速率提高到每秒 30 帧。为什么只有 Safari 这样?该功能要求浏览器在用户创建新标签或交换标签时通知播放器,当时这一版本的 Safari 是唯一支持该功能的 Mac 浏览器。

Flash Player Microbenchmark 测试和结果的示例

下面提供了 Flash Player Microbenchmark 测试和结果的示例,旨在说明在播放器开发期间 Macromedia 运行的性能测试的类型:

  • 得到测试结果的时间是 2005 年 8 月 30 日,采用的是 Flash Player 7r19 和 Flash Player 8r22 独立播放器。
  • 时间的度量单位是毫秒。百分比变化使用 Flash Player 8 作为参考点,如“对于在 Windows 上进行的 Boids 测试,Flash Player 8 比 Flash Player 7 快 51.5%。”
  • 我们使用以下参考机器:

    • Mac OS 10.3 – 800 MHz – 256 MB RAM (在双处理器机器上禁用 1 个 CPU)
    • Windows XP SP2 – P3 1 GHz – 384 MB RAM
    • 32 位分辨率(没有运行其他应用、没有鼠标移动、对进程没有设置特殊的优先级)

Flash Player Microbenchmark 测试和结果的示例

下一步工作

很明显,这并不是影响特定播放器功能的性能增强的详尽列表。一些更改和优化从表面上是看不到的,如更改底层的内部数据结构以使用较少的内存,或使用浮点矩阵提高渲染精度。一些增强使特定的功能更快,而有一些增强可能会使性能有所下降,目的是为了支持更酷的新功能。作为一个整体考虑时,Flash Player 8 中的性能特点和优化的总体效果有助于实现更平滑、更快速的内容和应用体验。

要了解有关 Flash Player 的更多信息,请访问 Flash Player 开发人员中心*

要了解有关 Flash Player 8 的更多信息,请访问 Flash Player 的功能页面。

关于作者

Emmy Huang 是 Flash Player 的高级产品经理。在一系列数字娱乐技术的工程设计和产品管理方面, 他具有丰富的经验, 曾就职的公司包括 Sony Pictures Digital、Liberate Technologies 和 Intel。在 UCLA 攻读 MBA 时, 她突然萌生了转入另一个行业的想法, 而最终她决定从事软件业, 因为这要比销售更有乐趣。