是否请求AnimationFrame可能会被长javascript卡住



我知道requestAnimationFrame在浏览器重新渲染之前会被调用,频率大约为60fps,但如果requestAnimationFrame的回调中有一个很长的javascript,它会阻止浏览器的重新渲染吗?因此卡住了下一个请求动画帧

接下来,如果没有内容或样式更改,为什么浏览器会以60fps的速度重新渲染?

是。

与任何基于事件的函数调用(requestAnimationFramesetTimeoutaddEventListener等(一样,如果JS引擎正忙于运行另一个函数(甚至是早期迭代中的相同函数(,则新函数在前一个函数完成之前无法运行。

我是一名游戏开发人员,对此非常熟悉。任何渲染时间过长的帧不仅会降低帧速率,还会锁定DOM。

我强烈建议你研究一下网络工作者和屏幕外的画布。这允许您将繁重的负载推送到不会干扰动画帧或DOM的后台进程中。

在这里可以找到一些优秀的演示:https://developers.google.com/web/updates/2018/08/offscreen-canvas

虽然你所说的关于60fps是真的,但有时只是根据文档

requestAnimationFrame((调用在大多数浏览器中在后台选项卡或隐藏iframe中运行时都会暂停,以提高性能和电池寿命。

最新更新