Maison > interface Web > js tutoriel > Comment éviter les fuites de mémoire JS dans les versions antérieures à IE9

Comment éviter les fuites de mémoire JS dans les versions antérieures à IE9

php中世界最好的语言
Libérer: 2018-05-15 10:25:42
original
1264 Les gens l'ont consulté

Cette fois je vais vous expliquer comment éviter les fuites de mémoire de JS dans les versions antérieures à IE9, et quelles sont les précautions pour éviter les fuites de mémoire de JS dans les versions antérieures à IE9. Ce qui suit est un cas pratique, jetons un coup d'oeil.

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 en tant que programme gestionnaire d'événements de 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 en référençant la variable dans la fermeture. Les références circulaires ont été éliminées. 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 faut Mettre elem à null. Cela supprimera la référence à l'objet DOM, réduira en douceur son nombre de références, et assurera le recyclage normal de la mémoire qu'il occupe."

I Je crois que vous avez lu le cas dans cet article.Après avoir maîtrisé la méthode, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php pour un contenu plus passionnant !

Lecture recommandée :

Explication détaillée des étapes pour implémenter la pagination dynamique et statique dans layui

vue+jquery+ le dessus lodash flotte lors du glissement Explication détaillée de l'implémentation de la fonction fixe

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