8

在以下示例中,如何通过 <canvas> 释放分配的内存:

<html>
  <head>
  </head>
  <body id="body">
    <canvas id="canvas" width=3000 height=2000/>
    <script>
      var canvas = document.getElementById("canvas");
      var ctx = canvas.getContext("2d");
      ctx.fillText("hao ar iu?", 20, 20);
    </script>
  </body>
</html>

我尝试将var canvas设置为 null(canvas = null),以删除画布(删除画布)或动态创建画布并将其附加到“文档”根,然后以这种方式删除它:

<div onclick=reload()>CLICK TO RELOAD PAGE</div>
<script>
  function reload(){
    body.removeChild(canvas);
    location.reload();
  }
</script>

没有任何变化,分配的内存随着每次页面重新加载而变得越来越大,直到我的浏览器占用过多的 CPU RAM 内存。有时浏览器会崩溃。有时垃圾收集器会清除范围之外的一些变量。但它让太多的内存被占用。我使用 Chrome 版本 25。是否有任何方法可以释放 <canvas> 内存或引发早期垃圾收集?

4

1 回答 1

-1

您是否尝试过 JavaScript 运算符删除?

delete canvas;

否则你可以试试这个对我有用的:

canvas.parentNode.removeChild(canvas);

您需要确保删除对画布的所有引用,即使是 DOM 或任何其他对象的引用,以避免内存泄漏。

PS:忘了说你的画布尺寸很大。保持画布尺寸尽可能小,以减少内存使用并提高 fps。

PS2:关闭路径将有助于避免内存泄漏

于 2013-05-02T05:32:47.803 回答