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

Résumer le problème de fuite de mémoire de JavaScript dans les versions antérieures à IE9

青灯夜游
Libérer: 2018-10-09 14:38:17
avant
1999 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 crée une référence circulaire. Puisque la fonction anonyme enregistre une référence à l'objet actif de assignHandler(), il sera impossible 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.

Le code ci-dessus peut être résolu avec une légère modification :

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 enregistrant une copie de elem.id dans une variable et dans la fermeture Le référencement de cette variable élimine la circulaire référence. 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. Cela déréférencera l'objet DOM, réduira avec succès son nombre de références et assurera un recyclage normal de la mémoire qu'il occupe."

Résumé : ce qui précède est l'intégralité du contenu de cet article. , j’espère que c’est possible. Cela sera utile à l’étude de chacun. Pour plus de didacticiels connexes, veuillez visiter le Tutoriel vidéo JavaScript !

Recommandations associées :

Tutoriel vidéo de formation sur le bien-être public php

Tutoriel graphique JavaScript

Manuel JavaScript en ligne

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:jb51.net
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