【问题标题】:jquery ajax causing memory leak in IE9jquery ajax导致IE9内存泄漏
【发布时间】:2011-03-30 15:38:32
【问题描述】:

我每 500 毫秒更新一次页面的值,并注意到 IE9 中存在由 jquery 的 $.ajax 方法引起的内存泄漏。

这是一个例子:

var refreshId = setInterval(refresh, 500);

function refresh() {

    $.ajax('/url/object?get=theObjectNeeded');
}

在示例中,我没有对这些值做任何事情,但通常它是一个JSON 请求,我会根据它填充值。无论哪种方式都存在内存泄漏。

我在 Firefox 4 和 IE8 上尝试了相同的代码,但没有发生泄漏。

有没有其他人遇到过这个问题,有人知道解决方案/黑客吗?我可以做的一件事是每隔几个小时刷新一次页面以释放内存,但我不想这样做。

【问题讨论】:

  • @Darcy 你能在 ie9 中测试以下内容吗?内存消耗确实增加了,但垃圾收集确实启动并定期清理。 jsfiddle.net/YCM4g/1
  • 如果您可以发布一些泄漏证明 - 它泄漏了多少 - 在什么样的时间段等,也很方便
  • @redsquare - 垃圾收集永远不会被调用。我在一台只有 4GB 的机器上将内存增加到超过 1.2GB,而且它永远不会清理。事实上,IE 在达到该点时会锁定。此外,如果我每 500 毫秒刷新一次页面,只需一个小时左右即可达到 1GB
  • @Darcy - 上面的测试应用怎么样?是否发生了同样的事情?
  • @redsquare。不,泄漏似乎没有发生。但是得到的对象也小得多,所以也许这与它有关。我还想指出,在我的一台测试机器上,即使版本完全相同,IE9 也完全没有泄漏! (操作系统也一样)

标签: html json jquery internet-explorer-9


【解决方案1】:

我的猜测是,ajax 请求的执行速度不如它们堆积起来的速度。为防止这种情况发生,您可以确保一次只发生一个刷新请求。

   function refresh() {
     $.ajax({
        url: '/url/object?get=theObjectNeeded', 
        success: function(){
          setTimeout(refresh, 500);
        }
      });
    }

【讨论】:

  • 响应在 100 毫秒内返回。另外,超时是否为 5 秒或更长也没关系(只是需要更长的时间才能炸毁)
  • @Darcy 我明白了。但出于好奇,我的解决方案是否有效,或者您是否有某些原因无法实施?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 2014-06-07
  • 2013-11-20
  • 2011-10-28
  • 2016-01-18
相关资源
最近更新 更多