游戏循环应使用 requestAnimationFrame 实现与浏览器刷新率同步的高效渲染,通过 delta time 保证逻辑稳定,结合页面可见性控制、帧率限制、性能优化及多线程处理,并借助开发者工具监控真实帧表现。
游戏循环的核心是用 requestAnimationFrame 替代 setInterval 或 setTimeout,它能与浏览器刷新率同步,天然支持 60fps(或更高),同时在页面不可见时自动暂停,省电又高效。
每次回调都应计算自上一帧以来的经过时间(delta time),用于物理更新和动画插值,避免因帧率波动导致速度不一致。
performance.now()),当前帧减去它即为 delta time(单位毫秒)
delta time 并多次更新,避免“掉帧累积误差”不是所有游戏都需要满帧渲染。对策略类或文字冒险游戏,锁定 30fps 可降低 CPU 占用;而动作游戏则应尽量贴近设备最大刷新率。
document.hidden 检测页面可见性,隐藏时暂停循环,恢复时重置时间戳will-change: transform)卡顿往往来自单帧耗时超标(>16ms),而非循环本身。重点在于让每一帧轻量、可预测。
Web Workers 处理纯计算型任务(如地图生成、物理预演),不阻塞渲染线程别只信理论值。用浏览器开发者工具的 Performance 面板录制运行过程,关注“Frames”轨道中的绿色长条(每帧耗时),红色标记表示超时。
frameCount)console.timeLog 标记关键阶段(update / render),快速定位瓶颈