9
votes

Comment supprimer la toile JavaScript

Je veux avoir un tas d'objets, disons: xxx pré>

et je vais aux occasions spécifier: p> xxx pré>

et ensuite : P>

block.canvas = null; (or whatever the appropriate method is)


1 commentaires

Merci pour les réponses les gars, tous très utiles. Apparemment, je ne peux pas encore uplifier cependant!


4 Réponses :


11
votes

La mémoire, qui est prise par des objets, qui sont référencées nulle part, est récupérée dans JavaScript par la collection ordures ( MDN DOCU sur ce ).

Donc, afin de libérer la mémoire, vous devez simplement supprimer toutes les références à vos objets Canvas et dans la prochaine exécution du collecteur de déchets, la mémoire sera libérée à nouveau.

Ceci peut être fait, comme vous l'avez fait, en utilisant block.canvas = null; ou (en fonction des objets / des propriétés de la portée) par Supprimer block.canvas . < / p>

Mais assurez-vous que vous supprimez chaque référence . Cela peut également être référencé par le DOM ou tout autre objet!


0 commentaires

1
votes

JavaScript dispose d'un opérateur nommé Supprimer: xxx

exemples: http://www.openjs.com/articles/delete.php


1 commentaires

Utilisez block.canvas = null à la place. Supprimer Modifiez la structure du bloc au moment de l'exécution, et c'est une opération contre-productive / coûteuse. Voir Smashingmagazine.com/2012/ 11 / ...



2
votes

La plupart des moteurs JavaScript utilisent Comptage de référence ou Mark-and-Swap comme stratégie de GC, donc tout objet sans référence à l'objet global (fenêtre dans l'environnement du navigateur) être libéré à un moment donné.

afin d'assurer que votre élément pourrait être collecté, vous devez vous assurer:

  • Aucune référence de variable ou de propriété Ceci, en exécutant block.canvas = null Vous obtenez des choses faites
  • L'élément n'est plus attaché à l'arborescence DOM, en exécutant canvas.parentnode.removechild (toile) Vous pouvez le faire faire

    à partir de votre code fourni, vous ne faites pas le suppression DOM , peut-être que votre n'est pas attaché à DOM Tree, mais si elle est, n'oubliez pas de Enlevez-le.

    PS: J'ai remarqué des réponses MONTION THE Supprimer le mot-clé Pour supprimer la propriété CANVAS , mais il n'est vraiment pas nécessitant, GC fonctionne comme prévu juste après Block .Canvas est défini sur null , puisque A Supprimer peut provoquer une exécution de V8 plus lente , mon conseil est d'empêcher l'utilisation de Supprimer . .


0 commentaires

4
votes

Ce n'est pas assez si vous utilisez réellement cette toile pour dessiner des objets. Si vous ajoutez la toile à DOM, vous devez également le supprimer, sinon il restera en mémoire bien sûr. Si vous l'ajoutez à l'aide de Appendicateur , vous devez le supprimer en utilisant removechild


Sur une note latérale, si vous allez avoir des objets d'objets comme vous le dites, c'est vraiment une mauvaise idée d'avoir une toile par objet. Vous devriez penser à avoir une toile par couche visuelle.


0 commentaires