由<canvas>内存在页面重新加载</canvas>上自由分配

时间:2013-03-04 08:38:38

标签: javascript html5 memory-leaks

如何通过&lt; canvas&gt;释放已分配的内存?在以下示例中:

<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.是否有任何方法可以释放&lt; canvas&gt;记忆或引起早期垃圾收集?

1 个答案:

答案 0 :(得分:-1)

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

delete canvas;

否则你可以尝试一下这对我有用:

canvas.parentNode.removeChild(canvas);

您需要确保删除对画布的每个引用,甚至是DOM或任何其他对象的引用,以避免内存泄漏。

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

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