2010-04-13 7 views

Répondre

4

Il ne devrait pas fuir. Le seul navigateur qui est infâme pour fuir comme un enfer quand un gestionnaire d'événement provoque un objet-hôte. La boucle JS-object est IE (jusqu'à la version 7), et IE (jusqu'à la version 8) ne supporte pas addEventListener. Laissez cette opération en cours et observez comment l'utilisation de la mémoire du navigateur est affectée à long terme si vous souhaitez la tester dans un navigateur particulier.

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

(Pour le tester avec un cadeau de boucle de référence, déplacez la définition function click vers le haut dans le corps replace.)

0

Vous obtiendrez fuite de mémoire si vous supprimez du DOM, des éléments qui ont attaché les auditeurs. Mais cela se produit uniquement dans IE, Fx et d'autres ont avancé GC.

Souvent, il arrive, si vous manipuler avec des éléments DOM non via DOM, mais comme

el.innerHTML = ... 

Par exemple, YUI a la réalisation personnalisée setInnerHTML, afin d'éviter la fuite de mémoire dans ce cas.