Javascript 免费分配者<;画布/>;页面上的内存重新加载
在以下示例中,如何通过释放已分配的内存:Javascript 免费分配者<;画布/>;页面上的内存重新加载,javascript,html,memory-leaks,Javascript,Html,Memory Leaks,在以下示例中,如何通过释放已分配的内存: <html> <head> </head> <body id="body"> <canvas id="canvas" width=3000 height=2000/> <script> var canvas = document.getElementById("canvas"); var ctx = canvas.getContex
<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=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
ctx.fillText(“hao ar iu?”,20,20);
我尝试将var canvas设置为null(canvas=null)、删除canvas(delete canvas)或动态创建canvas并将其附加到“document”根目录,然后以这种方式将其删除:
<div onclick=reload()>CLICK TO RELOAD PAGE</div>
<script>
function reload(){
body.removeChild(canvas);
location.reload();
}
</script>
单击以重新加载页面
函数重载(){
body.removeChild(画布);
location.reload();
}
没有任何变化,分配的内存会随着每次页面重新加载而越来越大,直到我的浏览器占用了太多的CPU RAM内存。有时浏览器会崩溃。有时垃圾收集器会清除范围外的一些变量。但是它占用了太多的内存。我使用Chrome版本25。是否有任何方法可以释放内存或引发早期垃圾收集?您是否尝试过JavaScript操作符delete
delete canvas;
否则,您可以尝试以下适合我的方法:
canvas.parentNode.removeChild(canvas);
您需要确保删除对画布的所有引用,即使是DOM或任何其他对象的引用,以避免内存泄漏
附言:忘了提到你的画布尺寸很大。使画布大小尽可能小,以减少内存使用并增加fps
PS2:关闭路径将有助于避免内存泄漏是的,正如您在我的帖子中看到的那样,我尝试了您列出的所有解决方案。对我来说,它们似乎都不可靠。你说的“封闭你的道路”是什么意思?我不画动画,所以在我的情况下,大尺寸不会影响性能。这不是delete的用途。