2010-04-13 12 views

Odpowiedz

4

Nie powinien przeciekać. Jedna przeglądarka, która jest niesławna z powodu wycieku jak cholera, gdy funkcja obsługi zdarzeń powoduje obiekt-obiekt <> Obiektu obiektów JS jest IE (do wersji 7), a IE (do wersji 8) nie obsługuje addEventListener.

Zostaw to działanie i zobacz, jak długo wpływa na wykorzystanie pamięci w przeglądarce, jeśli chcesz przetestować je w konkretnej przeglądarce.

<div id="x"></div> 
<script type="text/javascript"> 
    function replace() { 
     var x= document.getElementById('x'); 
     if (x.firstChild!==null) 
      x.removeChild(x.firstChild); 
     var el= document.createElement('p'); 
     el.addEventListener('click', click, false); 
     x.appendChild(el); 
    } 
    function click() { 
     alert('click'); 
    }; 
    setInterval(replace, 1); 
</script> 

(Aby przetestować go z obecnej pętli odniesienia, przesuń definicję function click się do organizmu replace.)

0

Dostaniesz przeciek pamięci, jeśli usunąć z DOM, elementy, które zostały przyłączone słuchaczy. Ale to występuje tylko w IE, Fx i inni mają zaawansowaną GC.

Często zdarza się, jeśli manipulować elementami DOM nie przez DOM, ale jak

el.innerHTML = ... 

Na przykład, YUI ma niestandardową realizację setInnerHTML, aby uniemożliwić wyciek pamięci w tym przypadku.

Powiązane problemy