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