浏览器内存随着javascript ajax调用不断增加

浏览器内存随着javascript ajax调用不断增加,javascript,jquery,memory,memory-leaks,Javascript,Jquery,Memory,Memory Leaks,我有一种奇怪的行为。我使用了一个相当沉重的页面(4000个节点),用于显示交付操作的调度系统。每隔30秒。我正在使用jquery刷新操作列表(3000个节点超过4000个)。它工作得很好,但是。。。每次,firefox和chrome的内存都会增加3到6ko。当然,过了一会儿,浏览器崩溃了 有人知道为什么吗?是内存泄漏吗?javascript在某个地方失败了吗?我检查了,每次刷新后,我都有相同数量的节点,这意味着正确执行了替换 每次刷新操作后,我都会重置几个事件:下面是一个示例 $("#order

我有一种奇怪的行为。我使用了一个相当沉重的页面(4000个节点),用于显示交付操作的调度系统。每隔30秒。我正在使用jquery刷新操作列表(3000个节点超过4000个)。它工作得很好,但是。。。每次,firefox和chrome的内存都会增加3到6ko。当然,过了一会儿,浏览器崩溃了

有人知道为什么吗?是内存泄漏吗?javascript在某个地方失败了吗?我检查了,每次刷新后,我都有相同数量的节点,这意味着正确执行了替换

每次刷新操作后,我都会重置几个事件:下面是一个示例

$("#orders_list .list_table_row").hover(
            function(){
            //  mouse over
                $(this).children().css("background-color","#E0E0E0");   
            },
            function(){
            //  mouse out
                $(this).children().css("background-color","");  
            });
任何建议都是非常受欢迎的,提示,任何

我发现了两个有趣的链接: 及

谢谢, 保罗


修订版1-添加了代码示例和链接

您的问题可能是事件处理程序。每次刷新时管理所有这些节点的绑定和解除绑定可能过于复杂

尝试改用事件委派。jQuery的
.live()
方法就是您想要的。它将加快刷新速度并消除事件处理程序的复杂性和泄漏

代替
$(“.myclass”)。单击(/*…*/)
使用
$(“.myclass”)。live(“单击”、/*…*/)
。您只需在页面加载时执行一次,它将适用于该类的所有未来元素,即使在ajax刷新之后也是如此

请参阅文档:

在删除事件绑定到的节点之前,必须解除绑定(最好是销毁)事件处理程序。否则将泄漏内存。
IE在使用闭包时也存在内存泄漏问题,如果闭包在某个点上是孤立的,并且没有正确地销毁,在某些情况下,垃圾收集器将无法拾取它。 有一些工具可用于跟踪内存泄漏(Firefox one在上面的评论中提到),
有关浏览器内存泄漏的更多信息(主要是IE):


欢迎使用代码(即使是缩小的代码…;)多了解一些信息就好了。例如,您要替换的4000个节点中是否有任何节点连接了事件处理程序,您是否使用闭包等。所有这些都可能是内存泄漏的原因。FF有一个内存泄漏监视器插件,我没有尝试过很多(只是安装了它)。也许它能给你一个暗示?实际上,我有很多事件处理程序。例如,我有以下事件:$(“#orders_list.list_table_row”).hover(function(){//鼠标悬停在$(this.children().css(“背景色”),“#E0E0E0”);},function(){//鼠标悬停$(this.children().css(“背景色”),”;});这是一个jquery标准函数。如果我理解正确,我应该在替换3000个节点之前解除所有事件的绑定?我发现了这个有趣的页面:谢谢Ilya!我认为这些事件是关闭问题的症结所在。我在替换之前解除了所有事件的绑定,并修复了问题。谢谢你的帮助!干杯谢谢你!非常有趣。我将探索这个特性。实际上,我使用了$(“.myclass”)。在替换节点之前取消绑定(/*…*/),它解决了我的问题。