3

我用下面的方式事件监听器/处理器的工作:Javascript mousemove空事件处理程序泄漏内存?

var _builder_canvas = document.getElementById("Builder"); 

    mouseMove = function() { 
    } 

    initBuilder = function() { 
     // Add mouse listener events 
     _builder_canvas.addEventListener('mousemove', mouseMove, true); 
    } 

随着“initBuilder”被称为与主文档的onload处理。

即使有一个如上所述的空函数,当我在Chrome(23.0.1271.64)或FF(16.0.2)中运行此代码时,每次鼠标移动时都会分配内存,永远不会释放内存。

我知道你总是需要移除事件侦听器以避免内存泄漏,但是当它是mousemove处理程序时,怎么做呢?处理程序需要在页面打开的整个过程中保持活动状态。

我也注意到,以类似的方式为mouseup或mousedown添加侦听器/处理程序不会导致任何额外的内存分配。

我在这里错过了什么?任何洞察力将不胜感激。

+1

我认为你已经削减了太多的代码。 :-)我们需要看看'mousemove'处理程序正在做什么来帮助您理解与调用它相关的内存没有被释放的原因。如果显示的内容真的是空的,与该调用相关的内存将立即有资格发布,并且Chrome非常擅长优化这种简单情况。我的猜测是你的处理程序做了一些事情(无意中)将事情联系起来。 –

+1

症状听起来像每个_mousemove_正在注册一个额外的事件处理程序或其他一些不会GCd的变量。 –

+0

@ T.J.Crowder:就是这样,当我有一个空函数时,我遇到了内存问题,就像上面在处理程序中没有发生任何事情一样。 – user1812575

回答

0

如果您使用devtools> timeline记录内存使用情况,那么在事件被触发后,您会看到内存被很好地释放。