0

Microsoft 文档W3C 文档均未提及泄漏。

它发生在动态创建的行上。这对我们来说是个问题,因为我们有一个单页 Web 应用程序,其中的表格通过 ajax 定期更新,最终 iexplore 消耗了所有内存并且 Windows 死掉了。

重现:

function process() {
  var row = document.createElement('tr');
  var cell = document.createElement('td');
  var text = document.createTextNode();
  
  // doesn't matter order of these lines:
  row.appendChild(cell);
  cell.appendChild(text);
  
  // this leaks on IE8/9:
  var x = row.cells;
  
  // this alternative doesn't:
  //var x = row.getElementsByTagName("td");
  
  setTimeout(process, 10);
}

process();

http://jsfiddle.net/5wzW2/1/ (jsfiddle 站点在 IE8 上不起作用,因此发布了上面的代码)。

在任务管理器中观看 iexplore 的内存使用量每分钟增加大约 1 MB。FF18/Chrome24 中没有。

有什么想法为什么,或者最好怎么做?

Microsoft 的错误报告页面似乎已损坏。我的解决方法是用 替换.cells.getElementsByTagName("td")例如在tablesorter插件中。

4

1 回答 1

0

存在对和DOM 对象的循环引用,因为它们在不在文档树中时引用自己:rowcell

var row = document.createElement('tr');
row.appendChild(cell);

此外,对该cells属性的调用返回一个IHTMLElementCollection

在 IE10 中存在内存泄漏错误:

于 2013-09-18T19:48:29.053 回答