Wiem, że to pytanie zostało zadane wcześniej, ale żadna z odpowiedzi nie rozwiązuje problemu. Testuję stronę AJAX, która aktualizuje elementy w DOM za pomocą javascript.Aktualizowanie DOM przez Javascript powodujące wycieki pamięci (tylko w Firefox?)
Co minutę serwer jest pytany o nowe dane, a DOM jest odpowiednio aktualizowany. Z tego co wiem, zużycie pamięci dla tej strony w Chrome rośnie, ale nie za dużo (zaczyna się około 40 MB i osiąga maks. 80 MB). W Firefoksie wykorzystanie pamięci zaczyna się od około 120 MB i może wzrosnąć do ponad 400 MB. Przejrzałem JavaScript z Firebug i wydaje mi się, że pamięć rozwija się najbardziej, gdy DOM jest aktualizowany za pomocą moich metod Javascript.
Manipulacja DOM jest proste, takie jak:
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);
}
Przed dołączanie nowych danych do węzłów DOM, najpierw usunąć istniejące dane. Próbowałem na różne sposoby, w tym co jest opisane tutaj: How to remove DOM elements without memory leaks?
a także w prosty sposób, takich jak:
function clearChildren(node){
if(node != null){
while (node.hasChildNodes()) node.removeChild(node.firstChild);
}
}
Ja również czytać (Cyclic adding/removing of DOM nodes causes memory leaks in JavaScript?), że przeglądarki rozpocząć tylko zbieranie śmieci kiedy osiągnie określony poziom? Czy to może być potwierdzone? Czuję, że po pewnym czasie mój komputer działa powoli z powodu rosnącej pamięci.
Uważam, że musi istnieć rozwiązanie tego problemu, ponieważ komercyjne witryny, które przetestowałem i wykonują te same czynności, nie powodują wzrostu zużycia pamięci.
Każda pomoc zostanie bardzo doceniona.
Dziękuję.
Dzięki za odpowiedź - czy Mootools zakłóca działanie JQuery? Używam JQuery na mojej stronie, a kiedy próbuję użyć funkcji Mootools destroy(), pojawia się błąd JS z informacją, że "destroy() nie jest funkcją" – user172092
Musisz poprawnie ustawić, aby grać razem (w moja strona to ładnie). Podobnie jak zamiast używać '$' w kodzie zależnym Mootools, musisz użyć selektorów 'document.id ('...') ' –
Dziękuję - wygląda na to, że użycie pamięci nie rośnie stale i widzę, że czasami się kurczy. Doceniam twoją pomoc. – user172092