Puisque vous avez ajouté le jQuery balise, j'ai eu une astuce suspicion quant à ce qui est un jQuery chose. Un rapide sur google m'a amené sur cette page. Lors de l'utilisation de jQ l' detach
méthode, une référence à l'objet est toujours conservé dans la mémoire, ce qui pourrait être la cause de votre instantané.
Une autre chose peut-être que jQuery a un div
nœud à la main, qui est-bien évidemment - de garder en mémoire, mais jamais ajouté au dom... une sorte d' document.createNode('div')
sans ajout d'elle. Cela, aussi, se montrer dans l'instantané de la mémoire. Vous ne pouvez pas y échapper, jQuery utilise pour analyser les chaînes dans des éléments html.
Afin de supprimer certains éléments de la mémoire, utiliser le jQuery .remove()
méthode, et votre mem sera effacé instantanément.cf Esailija commentaire sur pourquoi est - remove
n'est pas tout à fait adapter le projet de loi ici.
$('#someElem')[0].parentNode.removeChild($('#someElem')[0]);
Devrait supprimer l'élément tout à fait, mais pourrait ne pas séparer les événements. Peut-être quelque chose le long des lignes de:
$('#someElem').detach();//to remove any event listeners
$('#someElem')[0].parentNode.removeChild($('#someElem')[0]);//remove element all together
Et, encore une fois, comme Esailija a souligné, dans sa réponse, assurez-vous d'attribuer les références à tout objet jQuery (var someRef= $('.someSelector');
) à une variable globale, comme ils ne seront pas en GC ed. Il suffit d'éviter globals tous ensemble, en fait.
Mais pour répondre à votre question, brièvement et clairement: non ce ne sont pas de vrais fuites de mémoire, la mémoire doit être libéré sur l' onbeforeunload
événement. L'objet jQuery est supprimée, de sorte que toutes les références hors de portée. Au moins, c'est ce Que mon "recherche" m'amènent à penser. Peut-être pas tout à fait pertinente, mais seulement comme une référence , Voici une question sur mem-fuites que j'ai posté tout à l'arrière, et avec elle quelques choses que j'ai découvert..