Maison  >  Article  >  interface Web  >  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中世界最好的语言
php中世界最好的语言original
2018-05-15 10:25:421205parcourir

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);
  };
}

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;
}

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!

Déclaration:
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