Lors de la création d'un nouvel élément d'image dans JavaScript, l'outil de mémoire de Google Chrome (Outils de développement> Timeline> Memine) le considère comme un nouvel élément DOM, naturellement.
Dans mon cas, je me limite avec 1500+ Dom éléments, et je souhaite me débarrasser d'eux. J'ai essayé de sauvegarder tous les objets dans un tableau et de les supprimer toutes dans une boucle lorsque je suis prêt à créer tous les objets, ce qui permet d'obtenir l'erreur suivante: p>
qui indique que les objets d'image n'apparaissent pas dans le DOM réel. p> Company TypeError: impossible d'appeler la méthode ' removechild 'de null code> p>
5 Réponses :
Si vous ne les ajoutez pas au DOM (comme à l'aide de et pour éliminer les éléments de la mémoire, il vous suffit de retirer les références à ces objets (comme définir la variable de référencement à NULL) et la collecte des ordures fera le reste. Si vous ne pouvez pas tous les nuler, ils ne seraient pas GC'ed. P> appendicchild code> à un parent), alors removechild code> est inutile. Les objets d'image ne sont que dans la mémoire. P>
Juste curieux, si vous avez NULL, l'objet sera techniquement enlever la mémoire allouée de l'image code> code> après avoir été gc'd?
Je pense que seuls le moyen est de le faire:
for( i = 0; i < images.length; i++ ) images[i] = null; } // or just images = null;
afaik, attribution null code> doit le nettoyer: images [i] = null code> p> p>
paramètre C'est-à-dire que vous pourriez avoir du code comme celui-ci: p> De cette façon, vous obtiendrez toujours beaucoup d'alertes "tester", même si vous n'avez pas de référence à ces objets. p> Par conséquent, mon devinez em> est qu'il s'agit d'un bogue en chrome, pas dans votre code. p> mise à jour: regarder à travers la source du chrome Sorte de prouve que (je veux dire le commentaire sur les lignes 67-71 de ce fichier, notamment la note Fixme http://code.google.com/searchFrame#oamlx_jo-ck/src/third_party/webkit/source/webcore/bindings/v8/custom /V8htmlimageelementConstructeur.cpp ): P> images = null code> supprimerait votre référence en code à l'objet. Cependant, pour mettre en œuvre son événement code> code>, Chrome doit avoir sa propre référence interne à l'objet.
// Make sure the document is added to the DOM Node map. Otherwise, the HTMLImageElement instance
// may end up being the only node in the map and get garbage-ccollected prematurely.
// FIXME: The correct way to do this would be to make HTMLImageElement derive from
// ActiveDOMObject and use its interface to keep its wrapper alive. Then we would
// remove this code and the special case in isObservableThroughDOM.
Merci! Je sais que votre réponse a été la dernière fois, mais vous avez effectivement effectué des recherches
Cela a-t-il été réparé depuis ou s'agit-il d'un bug?
Ce n'est pas un bug! Vous avez ajouté un auditeur, mais n'a pas été supprimé. En faisant "image = null", vous ne retirez que cette référence concrète. L'objet existe toujours dans une mémoire, bien qu'aucune référence ne soit laissée. Pour laisser gs libérer, vous devez supprimer l'événement par "image.onload = null"
@shal est absolument juste. Pas un bug! Vous avez juste besoin de nettoyer après vous-même pour permettre au collecteur des ordures de faire son travail. ! Parfois plus facile dit que fait!)
Pour vous débarrasser du bug décrit par "Naivistes" de Chrome et Specilly Ie et Edge. Vous pouvez modifier la source d'image pour vider afin de prendre zéro mémoire.
image.src = ''; image = null;