javascript - 是否调用 requestAnimationFrame 堆栈?
问题描述
我有以下功能
function render() {
init = timeStep(init)
if (steps <= yQuotient) {
requestAnimationFrame(render)
}
}
export function fire() {
setup();
render();
}
然后fire()
,每当我需要启动/重新启动应用程序时,我都会调用。我的问题是,这是否会导致多个requestAnimationLoop()
's 在重复调用时像 eventListeners 那样建立起来的同时激活,可能会影响性能。
我是否需要将我的fire()
功能修改为这样的东西?
export function fire() {
cancelAnimationFrame(render)
setup();
render();
}
还是requestAnimationLoop()
只是在开始新循环时自动知道结束当前循环?
解决方案
是的,调用requestAnimationFrame
会将所有回调堆叠到动画帧回调映射中。
每个绘画帧,此地图的键都被获取并循环,允许从这样的回调中安排一个新的动画帧回调,用于在下一个绘画帧触发。
所以是的,在同一个事件循环迭代中多次调度同一个回调会降低页面的性能,因为它必须多次执行相同的工作。
不清楚你的系统是如何工作的,但游戏和交互式动画经常使用的策略是保持一个主动画循环一直运行并调用子任务。外部事件仅修改从这些子任务访问的对象的状态。
推荐阅读
- javascript - 当数组包含嵌套对象数组中的输入值时获取对象
- javascript - 类型“只读<{}>”上不存在属性“产品”
- mysql - 更新 MYSQL 中的 JSON 字段
- android - 如何使用协程在 Room db 中获取插入查询的 ID
- javascript - 将两个数组合并为来自其他数组的相邻元素 - javascript
- spring-boot - Spring Boot SAML 2.0 支持
- laravel - 如何将两个 Laravel 7 项目部署到 hostGator 的共享主机中?
- javascript - 如果类中存在特定内容,则禁用按钮
- c# - Unity检查按钮是否为空并将其隐藏
- sql - oracle查询根据日期过滤器获取添加、更新和删除记录的计数