【问题标题】:My js game constantly allocates and releases memory我的js游戏不断分配和释放内存
【发布时间】:2018-10-11 11:06:27
【问题描述】:

我的 pixi.js 游戏出了点问题。它每秒分配 1MB,3 秒后 GS 释放它。以此类推,无穷无尽。

我当然读过这篇文章,但 Chrome 工具似乎无法检测到问题 - 当我记录分配时间线时 - 它显示了一些罕见的尖峰,选择时 - 显示一些功能,但也有恒定的微小内存分配的峰值,不显示任何内容。我选择了它们,但在函数列表中我什么也看不到!

在逐帧代码中,我优化了所有内容 - 当我关闭 pixi 时 - 内存不会移动。只有当我在每一帧上进行 pixi 渲染场景时,这个恒定的分配/释放才会开始并且永远不会结束。在 PC 上没问题,但在移动设备上每 10 秒冻结 5 秒 - 无法播放。

是否有人在他们的代码中遇到频繁的分配/GC?如果是 - 你是如何调试它的,你是如何修复它的?

【问题讨论】:

  • 嗯...渲染需要内存。就是这样。
  • 如果您的计算量很大,请将其转移给网络工作者。然后使用 postmessage 获取游戏状态更新。它允许您将游戏线程与渲染线程分开。
  • 鉴于您的问题陈述,尚不清楚您期望什么样的帮助。我们知道你的代码在做什么,在哪里,何时,如何,什么都没有。
  • 你在玩游戏。一个游戏有大量的计算。碰撞检测、实体更新、精灵移动、游戏事件、光线追踪、射弹弧计算等……所有这些结合起来最终会变得非常繁重,导致大量局部变量移入和移出作用域函数。 1mb 的数据很多,这意味着大量的计算。这将由渲染计算引起。将游戏线程与渲染线程分开会释放一些计算时间。
  • 目前,meta.stackoverflow.com 上因一篇博文而引起了很多关于“友善”等的讨论。我不太在乎。让我们不要在这篇文章中讨论元问题,而是保持主题。

标签: javascript performance google-chrome-devtools pixi.js


【解决方案1】:

根据我的经验 Pixi.js 即使在空场景下也会出现 GC 峰值,您可以自己测试一下。随意在他们的仓库中打开 github 问题。我相信他们已经就泄漏问题进行了一些讨论。但我认为 pixi 本身不会产生太大影响,除非你有成千上万个对象。

你确定你做了一切吗?您应该在代码中滥用对象池模式和预分配。当您需要不断创建/删除对象(如子弹)时,尤其如此。 一般信息 https://www.html5rocks.com/en/tutorials/speed/static-mem-pools/

更新: 对于调试 chrome 工具来说是非常好的。 https://developers.google.com/web/tools/chrome-devtools/memory-problems/

【讨论】:

  • 没错!我的游戏包含不超过 100 个 DisplayObject。在我的所有项目中,我总是使用池。在这个特定的游戏中,所有对象都在游戏 evnn 开始之前创建,之后我在游戏中从不做“新”!此外,当什么都没有发生时,游戏仍然是静止的,屏幕上没有任何变化,我关闭了所有的活动(除了每一帧上的 pixi render())——尽管如此以 1M/秒的速度吃东西,一直在收集垃圾……当然,“chrome 开发工具/内存问题”是我读到的第一件事,并以多种方式尝试了很多次
猜你喜欢
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 2011-05-13
  • 2021-04-21
  • 1970-01-01
相关资源
最近更新 更多