【发布时间】:2021-06-07 11:14:51
【问题描述】:
我正在使用 JavaScript 构建一个以 60 FPS 运行的游戏,并注意到发生了大量垃圾收集(每 1.5 秒 7.2 MB,请参阅下面的 Chrome DevTools),这对帧速率有显着影响。
我使用分配时间线查看每帧添加到内存中的内容。正如您在下面看到的,每帧分配了 4.1 kB。所以我希望看到每 1.5 秒收集 369 kB 的垃圾。
为什么两者之间存在数量级差异?我一直在使用分配时间线来减少使用的内存(最初是每帧 18 kB)。但是,在查看“性能”标签时,这几乎是零影响。
由于分配时间线似乎不正确,有什么方法可以知道正在收集什么垃圾?
附加信息
- 这是游戏中两个时刻的堆快照比较。这似乎也不一致,它包含了很多我不希望每一帧都改变的东西。
-
我尝试在我的游戏中删除对象的数量(在一个数组中)这确实在“性能”标签中产生了很大的影响。但我真的很想在 DevTools 的某个地方看到这个数组,这样我就可以优化它了。
-
我尝试在屏幕上禁用渲染,但这没有影响。所以GC来自游戏代码。
-
在 Safari 中测量显示的结果与 Chrome 的性能选项卡相似。
【问题讨论】:
-
你使用
requestAnimationFrame吗? -
是的,事实上,如果您想查看源代码,我正在使用 Replay 引擎:github.com/edbentley/replay
标签: javascript memory google-chrome-devtools