Maison > interface Web > js tutoriel > le corps du texte

Problème de fuite de mémoire JavaScript dans les versions antérieures à IE9 (résumé détaillé)

亚连
Libérer: 2018-05-21 15:15:18
original
1495 Les gens l'ont consulté

Cet article résume le problème de fuite de mémoire de JavaScript dans les versions antérieures à IE9. Les amis intéressés peuvent en prendre connaissance.

Les versions antérieures à IE9 utilisent différentes routines de garbage collection pour les objets JScript et les objets COM (les objets COM utilisent une stratégie de collecte de « comptage de références »), donc les fermetures provoqueront des problèmes particuliers dans ces versions d'IE. Plus précisément, si un élément HTML est stocké dans la portée de la fermeture, cela signifie que l'élément ne peut pas être détruit.
Regardez l'exemple suivant :

function assignHandler() {
  var elem = document.getElementById('elem_id');
  elem.onclick = function(evt) {
    alert(elem.id);
  };
}
Copier après la connexion

Le code ci-dessus crée une fermeture qui agit comme un gestionnaire d'événements pour l'élément elem, et cette fermeture Une autre référence circulaire est créée. Puisque la fonction anonyme enregistre une référence à l'objet actif de assignHandler(), il ne sera pas possible de réduire le nombre de références d'éléments. Tant que la fonction anonyme existe, le numéro de référence d'elem est au moins 1, donc la mémoire qu'elle occupe ne sera jamais recyclée.

Vous pouvez modifier légèrement le code ci-dessus pour résoudre le problème :

function assignHandler() {
  var elem = document.getElementById('elem_id');
  var elem_id = elem.id;
  elem.onclick = function(evt) {
    alert(elem_id);
  };
  elem = null;
}
Copier après la connexion

En changeant le elem.id La copie est conservé dans une variable, et faire référence à cette variable dans la fermeture élimine la référence circulaire. Mais le simple fait de suivre cette étape ne peut toujours pas résoudre le problème de fuite de mémoire.

"La fermeture fera référence à l'intégralité de l'objet actif contenant la fonction, qui contient des éléments. Même si la fermeture ne fait pas directement référence à des éléments, une référence sera quand même enregistrée dans l'objet actif contenant la fonction. Par conséquent, il est nécessaire de définir elem sur null. De cette façon, vous pouvez déréférencer l'objet DOM, réussir à réduire son nombre de références et assurer le recyclage normal de la mémoire qu'il occupe."

Ce qui précède est ce que j'ai compilé pour vous. , et j'espère que cela vous sera utile à l'avenir.

Articles associés :

Fonction JavaScript hasOwnProperty() (tutoriel image et texte, avec exemples de code)

Javascript Le for in loop et hasOwnProperty sont utilisés ensemble

La différence entre JavaScript isPrototypeOf et hasOwnProperty (pratique)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!