Javascript js内存泄漏。如何在Phaser Canvas应用程序中正确释放对象?

Javascript js内存泄漏。如何在Phaser Canvas应用程序中正确释放对象?,javascript,html,phaser-framework,Javascript,Html,Phaser Framework,我们有一个运行Phaser.JS的游戏。 在使用浏览器的同时,内存似乎在不断增长 清洁物体的正确方法是什么 我将浓缩我的答案,使之可用 Phaser2声称,大多数对象可以通过为其引用分配null来简单地取消引用,这应该会触发垃圾收集 相反,其他人,如TilemapLayers,将明确需要调用其特定的析构函数 可以选择销毁其他粒子(例如,Particle.kill()) 然而,正如您所发现的,自动垃圾收集器并不总是很好,尤其是如果您长时间打开浏览器,它会泄漏内存 所以你应该杀死、停止、移除和摧毁所

我们有一个运行Phaser.JS的游戏。 在使用浏览器的同时,内存似乎在不断增长


清洁物体的正确方法是什么

我将浓缩我的答案,使之可用

Phaser2声称,大多数对象可以通过为其引用分配null来简单地取消引用,这应该会触发垃圾收集

相反,其他人,如TilemapLayers,将明确需要调用其特定的析构函数

可以选择销毁其他粒子(例如,
Particle.kill()

然而,正如您所发现的,自动垃圾收集器并不总是很好,尤其是如果您长时间打开浏览器,它会泄漏内存

所以你应该杀死、停止、移除和摧毁所有东西,甚至是可选对象。即使找不到特定的析构函数,大多数对象也会从PIXI.DisplayObject继承,从而实现
.RemoveChild
和变体。尤其是父级
Phaser.Stage

到这里:

搜索这些:
destroy
removeAll
.stage.删除
(和
删除
及其所有前缀和后缀,包括removeChild和变体)
停止
杀死

如果找不到特定的析构函数,请记住PIXI.DisplayObject继承和removeChild/ren

还记得退出时调用
Stage.removeStageReference()


我希望这对Phaser3(我不知道Phaser2)有帮助,仅仅移除一个子游戏对象是不够的。除非同时调用destroy()方法,否则它将消耗内存。

什么版本?移相器2或3?移相器CE 2.10.5