【发布时间】:2016-11-11 07:59:37
【问题描述】:
我遇到了 requestAnimationFrame() 的性能问题。
考虑以下代码。这是一个简单的循环,每次这个时间增量大于 20 毫秒时打印自上一帧以来的时间。
const glob_time_info = {delta_time: 0.0, last_frame: performance.now()};
var render = function (timestamp) {
glob_time_info.delta_time = timestamp - glob_time_info.last_frame;
glob_time_info.last_frame = timestamp;
if(glob_time_info.delta_time > 20)
console.log(glob_time_info.delta_time);
requestAnimationFrame(render);
};
render(performance.now());
据我了解 requestAnimationFrame 这个 sn-p 不应该打印任何东西,因为它试图每秒运行 60 次(60Hz 作为我的显示器)。 因此,时间增量应始终在 16-17 毫秒左右。
但它每隔几秒打印一次大约 33 毫秒。 为什么?
我在 Windows 10 上使用 Chrome 54 和 Firefox 49 遇到过这种情况。我拥有一台 i5-6600
更新 这里是 Nit 的 windows 和 ubuntu 脚本的输出。窗户,你在做什么? 视窗 10(电脑): WIndows 8(与以下相同的上网本): Ubuntu(与上面相同的上网本):
【问题讨论】:
-
它被固定在 16 并且当我运行它时会改变。可能与垃圾收集和您的计算机正在执行的其他操作有关。
-
"tries" 是关键字,如果有东西阻塞了线程,即使是几毫秒,它也不再成功
-
我也想过GC,但是每隔几秒?以及他必须收集什么 :) 如果每隔几秒帧速率下降到 30FPS 或更差,你如何制作流畅的动画
-
And how can you make smooth animations if every few seconds the framerate drops down to 30FPS or worse- 通过使动画基于时间而不是基于帧 -
这很可能与操作系统运行 CPU 的方式有关,而不是与您的代码有关。
标签: javascript requestanimationframe