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

我有一个奇怪的行为。 我正在使用一个相当重的页面(4000个节点),用于显示交付操作的调度系统。 每30秒。 我用jquery刷新了操作列表(超过4000的3000个节点)。 它运行得非常好,但是…每次,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",""); }); 

任何建议都非常受欢迎,提示,任何事情……

我找到了两个有趣的链接: http : //www.javascriptkit.com/javatutors/closuresleak/index3.shtml和http://www.jibbering.com/faq/faq_notes/closures.html

谢谢,保罗

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

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

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

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

请参阅文档: http : //api.jquery.com/live/

在删除那些事件绑定的节点之前,您必须解除绑定(并最好是销毁)事件处理程序。 如果不这样做会泄漏内存。
IE在使用闭包时也存在泄漏内存的问题,如果闭包在某些时候是孤立的并且没有被正确销毁,在某些情况下垃圾收集器将无法拾取它。 有一些工具可用于跟踪内存泄漏(Firefox注释中提到了一个), IE漏检测器 , JavaScript内存泄漏检测器
有关浏览器中内存泄漏的更多信息(主要是IE):
了解和解决Internet Explorer泄漏模式
IE中的闭包泄漏