Qu'est-ce que le garbage collection JavaScript ?
P粉334721359
2023-08-17 11:15:23
<p>Qu'est-ce que le garbage collection JavaScript ? Pour les programmeurs Web, il est important de comprendre l’importance du garbage collection JavaScript afin d’écrire un meilleur code. </p>
Méfiez-vous des références circulaires lorsqu'il s'agit d'objets DOM :
Modèles de fuite de mémoire en JavaScript
N'oubliez pas que la mémoire ne peut être récupérée que lorsqu'il n'y a aucune référence active à l'objet. Il s'agit d'un piège courant avec les fermetures et les gestionnaires d'événements, car certains moteurs JS ne vérifient pas les variables réellement référencées dans la fonction interne et conservent simplement toutes les variables locales de la fonction englobante.
Voici un exemple simple :
Une implémentation JS naïve ne peut pas collecter tant que le gestionnaire d'événements existe
bigString
。有几种解决这个问题的方法,例如在init()
的末尾设置bigString = null
(delete
对于局部变量和函数参数不起作用:delete
从对象中删除属性,而变量对象是不可访问的 - 在严格模式下的ES5甚至会抛出ReferenceError
si vous essayez de supprimer la variable locale ! ).Je recommande d'essayer d'éviter les fermetures inutiles si vous vous souciez de la consommation de mémoire.
Eric Lippert a écrit il y a quelque temps un article de blog détaillé qui parle de ce sujet (et le compare à VBScript). Pour être plus précis, il a écrit sur JScript, la propre implémentation d'ECMAScript par Microsoft, bien que très similaire à JavaScript. Je suppose que vous pouvez supposer que la plupart du comportement est le même dans le moteur JavaScript d'Internet Explorer. Bien entendu, l’implémentation spécifique varie d’un navigateur à l’autre, mais je suppose que vous pouvez appliquer certains principes communs à d’autres navigateurs.
Cité de cette page :
L'objectif principal du garbage collection est de libérer les programmeurs de la nécessité de se soucier de la gestion de la mémoire des objets qu'ils créent et utilisent, bien que cela soit parfois inévitable - il est toujours bénéfique d'avoir au moins une compréhension générale du fonctionnement du garbage collection.
Note historique : Une version antérieure de la réponse contenait une référence incorrecte à l'opérateur
delete
. En JavaScript, l'opérationdelete
. L'opérateurdelete
运算符的错误引用。在JavaScript中,delete
运算符从对象中删除属性,与C/C++中的delete
supprime les attributs d'un objet, ce qui est complètement différent dedelete
en C/C++.