Mam aplikację, która pozwala użytkownikowi przeglądać szczegółowe informacje o konkretnym przypadku bez podsumowania. Za każdym razem, gdy użytkownik żąda danych z serwera, wyciągam następujące znaczniki.Jak pozbyć się elementów DOM w JavaScript, aby uniknąć wycieków pamięci?
<form name="frmAJAX" method="post" action="Default.aspx?id=123456" id="frmAJAX">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" />
</div>
<div>
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" />
</div>
<div id="inner">
<!-- valid info here --!>
</div>
</form>
Następny biorę powyżej InnerHTML go do nowego elementu DOM tak:
success: function(xhtml) {
var tr = document.createElement('tr');
var td = document.createElement('td');
var container = document.createElement('div');
obj.parentNode.parentNode.parentNode.insertBefore(tr, obj.parentNode.parentNode.nextSibling);
td.appendChild(container);
container.innerHTML = xhtml;
tr.appendChild(td);
ale po wyżej, używam niektóre jQuery do usuwania nieprzyjemnych aspnet Junk
$('form:eq(1)').children().each(
function() {
if ($('form:eq(1)').find('div').filter(function() { return $(this).attr('id') == ''; }).remove());
}
);
//Capture the remaining children
var children = $('form:eq(1)').children();
// Remove the form
$('form:eq(1)').remove();
// append the correct child element back to the DOM
parentObj.append(children);
Moje pytanie brzmi - podczas korzystania z IESieve nie zauważam faktycznych przecieków, ale ciągle rosnącą liczbę elementów DOM (a więc wykorzystanie pamięci).
Co mogę poprawić po stronie klienta, aby rzeczywiście oczyścić ten bałagan? Uwaga - oba IE7/8 pokazują te wyniki.
EDIT: I w końcu udało się tej pracy i postanowiłem napisać krótki blog post z pełnym kodem źródłowym.
Należy naprawdę zaakceptować odpowiedź na to pytanie teraz .... – Blazemonger
można zaktualizować URL blogu post? – Christian
@ Christians po prostu (przepraszam za zepsuty link) –