0

Ни Microsoft documentation, ни W3C documentation не упоминают утечку.свойство ячеек утечки памяти в Internet Explorer?

Это происходит на динамически создаваемых строках. Это проблема для нас, поскольку у нас есть одностраничное веб-приложение с таблицами, регулярно обновляемыми через 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, следовательно, разместить код, указанный выше).

Watch Mem Usage for iexplore каждый раз поднимается вокруг MB в диспетчере задач. Не работает в FF18/Chrome24.

Любые идеи, почему, или что с ним можно сделать?

Microsoft's bug reporting page, похоже, сломан. Моим обходным решением является замена .cells на .getElementsByTagName("td"), например. в плагине tablesorter.

ответ

0

Есть circular references к row и cell DOM объектов, так как они относятся к себе, пока они не находятся в дереве документа:

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

Кроме того, вызов cells свойство возвращает IHTMLElementCollection

Какая ошибка утечки памяти в IE10:

Смежные вопросы