2009-03-13 7 views
4

Je me demande si le code jquery suivant provoque une fuite de mémoire:Cet extrait de code jQuery provoque-t-il des fuites de mémoire?

$(function() {     
    var parent=$('table#mytable tbody').get(0); 
    $('tr:last', parent).click(function(){...}); 
}); 

Pour ma compréhension, $('tr:last', parent) est la dernière ligne qui est l'objet DOM, mais dans la fonction anonyme, la fermeture a cet objet DOM scope, il existe donc une référence circulaire entre les objets DOM et js.

Mais s'il y a vraiment une fuite, alors je peux voir qu'il y a beaucoup de type de code dans le livre populaire "jQuery in Action" publié par Manning. C'est une «meilleure pratique» nuisible dans le codage jQuery? Mais je ne sais pas si ma compréhension est correcte. J'espère que vos commentaires et corrections. Merci!

Répondre

2

Ce code provoque fuite de mémoire dans Internet Explorer 6 et Internet Explorer 7 pas dans un autre navigateur s'il vous plaît consulter ces aritcles par Douglas Crockford et IBM Devloper Site

+0

Est-ce que firefox a une telle fuite? – jscoot

+0

aucun firefox n'a une telle fuite seulement c'est-à-dire a ceci. –

+0

La question portait sur jQuery et au moins à partir de la version de jQuery publiée en janvier 2009, ce code ne fuira PAS. Cette réponse est fausse. Voir ma bonne réponse ci-dessous. – umassthrower

1

IE est sujette fuite. Vous pouvez tester votre code pour les fuites dans IE avec Microsofts javascript memory leak detector.

Firefox peut également fuir. This article explique pourquoi. Il y a aussi un leak detector plugin pour Firefox (ne l'avez pas encore testé).

+0

Testé le plugin détecteur de fuite Firefox: stackoverflow montre beaucoup de fuites! – KooiInc

+0

semble que notre moteur de navigateur a besoin d'une refonte dans le Web 2.0 et pour notre avenir :-) – jscoot

0

Les réponses précédemment soumises (à partir de 3 ans, soupir) sont erronées. Alors que jQuery 1,0 - 1,2 fuirait ici, en regardant la version de jQuery à partir de laquelle cette question a été posée http://download.oldapps.com/jquery/jquery-1.3.js la ligne suivante a été inclus dans la fonction qui ajoute tous les auditeurs de l'événement:

 // Nullify elem to prevent memory leaks in IE 
    elem = null; 

Quelle est la suggestion de prévention des fuites exacte de la documentation liée.

Questions connexes