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