javascript - 多个 requestAnimationFrame 性能

标签 javascript jquery performance animation requestanimationframe

如果我正在制作多个动画,添加多个 requestAnimationFrame 回调在性能方面是否可行?例如:

function anim1() {
    // animate element 1
}

function anim2() {
    // animate element 2
}

function anim3() {
    // animate element 3
}

requestAnimationFrame(anim1);
requestAnimationFrame(anim2);
requestAnimationFrame(anim3);

或者它被证明比使用单个回调更糟糕:

(function anim() {
    requestAnimationFrame(anim);
    anim1();
    anim2();
    anim3();
}());

我问是因为我真的不知道幕后发生了什么,requestAnimationFrame 是否在多次调用时排队回调?

最佳答案

我认为这些答案中的任何一个都不能真正解释我在寻找什么:“不要调用 requestAnimationFrame”得到去抖动(即每帧出队 1 个)或在下一帧中全部被调用。

When callbacks queued by requestAnimationFrame() begin to fire multiple callbacks in a single frame (mdn)

这表明后者,可以在同一帧中调用多个回调。

我通过以下测试确认。 60 赫兹的刷新率转换为 17 毫秒的周期。如果是前者,则不会有 2 个时间戳彼此相差 17 毫秒以内,但事实并非如此。

let sleep = ms => new Promise(resolve => setTimeout(resolve, ms));

let update = async timestamp => {
  console.log('update called', timestamp)
  await sleep(10);
  requestAnimationFrame(update);
}

requestAnimationFrame(update);
requestAnimationFrame(update);
requestAnimationFrame(update);
requestAnimationFrame(update);
requestAnimationFrame(update);
requestAnimationFrame(update);
requestAnimationFrame(update);
requestAnimationFrame(update);
requestAnimationFrame(update);
requestAnimationFrame(update);
requestAnimationFrame(update);
requestAnimationFrame(update);
requestAnimationFrame(update);
requestAnimationFrame(update);
requestAnimationFrame(update);

关于javascript - 多个 requestAnimationFrame 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17103785/

相关文章:

javascript - 显示多个字段的单个错误消息(jQuery 验证插件)

javascript - 如何将数据从 eventSources 提供给 EventListener

javascript - 使用 jQuery 在 textarea 中插入脚本标签

javascript - Jquery/Javascript 使用另一个文本框的 id 获取文本框的 id

javascript - Jquery Fancybox 高度/向下滚动

javascript - 如何使用原生 javascript 生成 `groupBy`

javascript - 如何将 jQuery Validation 插件与表单级服务器端验证一起使用?

java - 删除冗余的 JUnit 测试套件测试

performance - 为什么不经常访问的 Azure Blob 存储速度很慢?

python读取文件,为每一行保存一个新列并保存相同的文件