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