Speedometer 2.1

我们宣布 Speedometer 基准测试进行了一次更新。这是一个小版本更新,旨在修复基准测试工具,以提高我们衡量渲染引擎速度的准确性和稳定性。

setTimeout 嵌套层级和节流

Speedometer 旨在在计算分数时,将其工作时间测量中包含异步工作。这是必要的,因为一些浏览器引擎采用优化策略,推迟某些工作以减少同步操作的运行时间。为了测量异步工作所用的时间,Speedometer 测试工具使用 setTimeout 来计算异步工作完成后的结束时间。

然而,在测试工具中为每个子测试使用 setTimeout 会累积 setTimeout 的嵌套层级。根据规范,这会在每个 setTimeout 回调之间触发人工的 4 毫秒节流,以提高能源效率,并导致测得的工作时间包含此节流。这并不理想,因为 (1) 我们达到深层嵌套级别是由于测试工具的构建方式,而不是由于测试内容;(2) 在工具中使用 setTimeout 的预期目的是测量延迟异步工作的时间,而不是人工节流。

此更新为每次测试运行插入了 window.requestAnimationFrame。这会重置由测试工具和其他子测试添加的 setTimeout 嵌套层级,并通过更好地隔离每个子测试来提高工作时间测量的准确性和稳定性。我们观察到在稳定版 Safari、Chrome 和 Firefox 中有 3-5% 的改进。

结论

Speedometer 2.1 通过确保在不引入网页引擎定时器节流的情况下捕获异步工作时间,从而提高了分数测量的准确性和稳定性。