作成しているJavaScriptゲームの視覚効果を作成しようと取り組んでいますが、スプライトの色を調整するために使用しているコードによって、ブラウザーのメモリ使用量がどんどん増えていることに気付きました。一見無制限に見えます。
ここでコードとメモリリークを確認できます:http: //timzook.tk/javascript/test.html
このメモリリークは、新しいImageDataオブジェクトを再色付けするために、フレームごとに(setIntervalを介して)キャンバスコンテキストからgetImageDataを呼び出すときに、updateimage()関数でのみ発生します。javascriptのガベージコレクターが古いものを破壊すると思っていたでしょうが、そうでなければ、手動で破壊する方法がわかりません。なぜこれを行うのか、またはそれを修正する方法を理解するための助けをいただければ幸いです。
私の質問はこれに非常に似ています:getImageData、javascript、HTML5キャンバスのこの使用でメモリリークは何ですかしかし、setIntervalによって呼び出される関数内のすべてのフレームを実行するためのコードが必要です、setInterval関数の外に移動する彼のソリューションは私には選択肢がありません。彼がそれを解決する他の方法を見つけたかどうかを尋ねるコメントを残すことはできません。
テストする人への注意:この例ではgetImageDataを使用しているため、.htmlファイルにスローするだけではローカルでテストできません。Webサーバーが必要です。また、明らかにHTML5要素を使用しているため、一部のブラウザはそれを使用できません。
編集:*解決済み* ありがとう、以下の解決策で修正されました。drawImage()で画像を使用するのと同じようにcanvas要素を使用できることに気づかなかったので、コードを再構築して、メモリの使用量を大幅に減らしました。誰かが見たい場合は、この変更されたコードを上記のリンク先のページにアップロードしました。