requestAnimationFrame 可以做什么?

发布于 2024-02-03 15:33:38 字数 782 浏览 43 评论 0

requestAnimationFrame(callback) API 可以在浏览器下一次重绘之前执行回调,它通常会与屏幕的刷新率保持一致。 大部分屏幕的刷新率都是 60Hz ,也就是一秒内刷新 60 次,那我们计算一下就可以得到一次执行大概是 16.6ms 左右: 1000ms/60 = 16.6666 ,这也就是说如果你一个任务执行超过了 16.6ms ,就有存在卡顿的风险。

应用

我们可以利用 requestAnimationFrame 来计算每秒帧数 fps(frame per second)。具体思路是:设置一个计数器和一个时间变量,然后执行 requestAnimationFrame 调度给计数器加 1,如果判断到当前时间与上次执行的时间差超过了 1000ms,我们就打印出当前的计数器,这个就是帧数了。

(() => {
  let fps = 0
  let prevTimestamp = Date.now()
  function loop() {
    fps++
    const elapsed = Date.now() - prevTimestamp
    if (elapsed >= 1000) {
      console.log('fps', fps)
      prevTimestamp = Date.now()
      fps = 0
    }
    requestAnimationFrame(loop)
  }
  requestAnimationFrame(loop)
})()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文