Phaser.Gameのインスタンスを作成してから破棄するという単純なケースでは、メモリリークがあるようです。以下に、完全な実例を示します。ボタンをクリックしてインスタンスを作成し、再度クリックしてインスタンスを破棄します。ボタンを繰り返しクリックすると、メモリ使用量が制限なく増加します。代わりに私がやるべきであるフェイザーのライフサイクルについて何か不足していますか?Phaser.Gameのインスタンスを破壊する適切な方法は何ですか?
私はこれをjsfiddleではなくcode snippetとして投稿しています。なぜなら、問題を見るためにメモリプロファイラなどを探す必要があるため、jsfiddleは問題を複雑にするだけです。
<!doctype html>
<html>
<head>
<meta charset="UTF-8"/>
<title>test</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/phaser-ce/2.8.1/phaser.js">
</script>
</head>
<body>
<button id="button">Click</button>
<div id="canvas"></div>
<script>
window.onload = function() {
var d, n, game;
d = document.getElementById('button');
n = document.getElementById('canvas');
function preload() {
}
function create() {
}
function update() {
}
function handler() {
if(game) {
game.destroy();
game = null;
} else {
game = new Phaser.Game(800, 600, Phaser.AUTO, n, {
preload: preload,
create: create,
update: update
});
}
}
d.onclick = handler;
};
</script>
</body>
</html>
「私はJSの専門家ではないが、これは単にである可能性がありますまだGCでクリーンアップされていませんか? – displayname
いいえ - メモリは、待機するかガベージコレクションを強制する(たとえば、Chromeのデベロッパーツールを使用するなど)ことによってガベージコレクションされません。 – jbg