Je veux avoir un tas d'objets, disons: et je vais aux occasions spécifier: p> et ensuite : P> block.canvas = null; (or whatever the appropriate method is)
4 Réponses :
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 em> ( MDN DOCU sur ce ). P>
Donc, afin de libérer la mémoire, vous devez simplement supprimer toutes les références à vos objets code> Canvas CODE> et dans la prochaine exécution du collecteur de déchets, la mémoire sera libérée à nouveau. P >
Ceci peut être fait, comme vous l'avez fait, en utilisant Mais assurez-vous que vous supprimez chaque référence em>. Cela peut également être référencé par le DOM ou tout autre objet! P> block.canvas = null; code> ou (en fonction des objets / des propriétés de la portée) par
Supprimer block.canvas code>. < / p>
JavaScript dispose d'un opérateur nommé Supprimer: exemples: http://www.openjs.com/articles/delete.php p> p>
Utilisez block.canvas = null code> à la place.
Supprimer CODE> Modifiez la structure du bloc code> au moment de l'exécution, et c'est une opération contre-productive / coûteuse. Voir Smashingmagazine.com/2012/ 11 / ...
La plupart des moteurs JavaScript utilisent Comptage de référence forte> ou Mark-and-Swap Strong> 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é. p>
afin d'assurer que votre élément
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 code>
, vous devez le supprimer en utilisant removechild code>
p>
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. P>
Merci pour les réponses les gars, tous très utiles. Apparemment, je ne peux pas encore uplifier cependant!