Qu'est-ce que le garbage collection JavaScript ?
P粉334721359
P粉334721359 2023-08-17 11:15:23
0
2
593
<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>
P粉334721359
P粉334721359

répondre à tous(2)
P粉033429162

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 :

function init() {
    var bigString = new Array(1000).join('xxx');
    var foo = document.getElementById('foo');
    foo.onclick = function() {
        // 即使`bigString`在任何地方都没有被引用,这可能会创建对`bigString`的闭包!
    };
}

Une implémentation JS naïve ne peut pas collecter tant que le gestionnaire d'événements existe bigString。有几种解决这个问题的方法,例如在init()的末尾设置bigString = nulldelete对于局部变量和函数参数不起作用: 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.

P粉547170972

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ération delete. L'opérateur delete运算符的错误引用。在JavaScript中,delete运算符从对象中删除属性,与C/C++中的delete supprime les attributs d'un objet, ce qui est complètement différent de delete en C/C++.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal