2010-04-13 25 views

cevap

4

Sızıntı yapmamalı. Bir olay işleyicisi bir ana makine tanıtıcısına neden olduğunda cehennem gibi sızıntı yapan bir tarayıcı <> JS nesnesi döngü IE'dir (sürüm 7'ye kadar) ve IE (sürüm 8'e kadar) addEventListener'u desteklemez.

Belirli bir tarayıcıda test etmek istiyorsanız, bu koşuyu açık bırakın ve tarayıcının bellek kullanımının uzun vadede nasıl etkilendiğini görün.

<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> 

(replace vücuda function click tanımını yukarı taşımak, bir referans döngü varken bunu test etmek için.) DOM, dinleyicileri eklenmiş elementlerden silerseniz bellek sızıntısı alacak

0

. Ancak bu sadece IE, Fx ve diğerleri GC'de gelişmiş. Eğer değil DOM üzerinden DOM unsurları ile manipüle eğer

Genellikle, olur, ancak Örneğin

el.innerHTML = ... 

gibi YUI bu durumda bellek sızıntısı önlemek için özel gerçekleşmesini setInnerHTML sahiptir.