Обновление DOM через Javascript вызывает утечки памяти (только в Firefox?)

Я знаю, что этот вопрос задавался раньше, но, похоже, ни один из ответов не решает проблему. Я тестирую веб-страницу AJAX, которая обновляет элементы в DOM с помощью javascript.

Каждую минуту сервер запрашивает новые данные, и DOM обновляется соответствующим образом. Насколько я могу судить, использование памяти для этой страницы в Chrome растет, но не слишком сильно (оно начинается с 40 МБ и достигает максимум 80 МБ). В Firefox, однако, использование памяти начинается примерно со 120 МБ и может увеличиваться до более 400 МБ. Я прошел через Javascript с Firebug, и мне кажется, что память увеличивается больше всего, когда DOM обновляется с помощью моих методов Javascript.

Манипуляции с DOM просты, например:

var myTable = document.createElement("table");

var thead = document.createElement("thead");
var tr = document.createElement("tr");
var th = document.createElement("th");
th.appendChild(document.createTextNode("column1"));
tr.appendChild(th);

for(var test in obj.testObjs){
    th = document.createElement("th");
    th.appendChild(document.createTextNode(obj.testObjs[test].myVar));
    tr.appendChild(th);
}

Перед добавлением новых данных в узлы в DOM я сначала очищаю существующие данные. Я пробовал несколько способов, включая описанные здесь: Как удалить элементы DOM без утечек памяти?

А также простой способ, например:

function clearChildren(node){
    if(node != null){
        while (node.hasChildNodes()) node.removeChild(node.firstChild);
    }
}

Я также читал ( Циклическое добавление / удаление узлов DOM вызывает утечку памяти в JavaScript? ) что браузеры начинают сбор мусора только тогда, когда он достигает определенного уровня? Это можно подтвердить? Я чувствую, что мой компьютер через некоторое время работает медленно из-за увеличения объема памяти.

Я чувствую, что должно быть решение этой проблемы, потому что коммерческие сайты, которые я тестировал, которые выполняют те же функциональные шаги, не вызывают использования памяти расти.

Любая помощь будет принята с благодарностью.

Спасибо.

5
задан Community 23 May 2017 в 10:28
поделиться