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

ES6 WeakMap résout les fuites de mémoire

小云云
Libérer: 2018-03-12 09:09:10
original
1636 Les gens l'ont consulté

Cet article vous présente principalement une explication détaillée de la façon dont ES6 résout le problème de fuite de mémoire via WeakMap. L'éditeur pense que c'est plutôt bien, je vais donc le partager avec vous maintenant, dans l'espoir d'aider tout le monde.

1. Map

1. Définition

L'objet Map enregistre les paires clé-valeur, similaire à un dictionnaire de structure de données, contrairement aux objets traditionnels, qui ne peuvent utiliser ; chaînes Lorsque les clés sont différentes, l'objet Map peut utiliser n'importe quelle valeur comme clé.

2. Syntaxe

new Map([iterable])
Copier après la connexion

Attribut

taille : renvoie le nombre de paires clé-valeur.

Méthode de fonctionnement

  1. set(key, value) : Définir (ajouter/mettre à jour) la valeur de la clé key sur la valeur et renvoyer l'objet Map.

  2. get(key) : lit la valeur de la clé key, sinon, renvoie undefined.

  3. has(key) : Détermine si une paire clé-valeur existe dans un objet Map et renvoie vrai/faux.

  4. delete(key) : supprime une paire clé-valeur et renvoie vrai/faux.

  5. clear() : efface toutes les paires clé-valeur dans l'objet Map.

Méthode Traversal

  1. keys() : renvoie l'objet Iterator du nom de la clé.

  2. values() : renvoie l'objet Iterator de la valeur clé.

  3. entries() : renvoie un objet Iterator de paires clé-valeur.

  4. forEach((value, key, map) => {}) : Parcourez toutes les paires clé-valeur de l'objet Map.

3. Exemple

Méthode de fonctionnement

let m = new Map([
  ['foo', 11],
  ['bar', 22]
]);
m.set('mazey', 322)
  .set('mazey', 413);
console.log(m); // {"foo" => 11, "bar" => 22, "mazey" => 413}
console.log(m.has('mazey')); // true
m.delete('mazey');
console.log(m.has('mazey')); // false
m.clear();
console.log(m); // {}
Copier après la connexion

Méthode de traversée

let m = new Map([
  ['foo', 11],
  ['bar', 22],
  ['mazey', 413]
]);
console.log(m); // {"foo" => 11, "bar" => 22, "mazey" => 413}
console.log(m.keys()); // MapIterator {"foo", "bar", "mazey"}
console.log(m.values()); // MapIterator {11, 22, 413}
console.log(m.entries()); // MapIterator {"foo" => 11, "bar" => 22, "mazey" => 413}
m.forEach((value, key, map) => {
  console.log("键:%s,值:%s", key, value);
});
// 键:foo,值:11
// 键:bar,值:22
// 键:mazey,值:413
Copier après la connexion

2. 🎜>1. Définition

L'objet WeakMap enregistre les paires clé-valeur. Contrairement à Map, sa clé doit être un objet, car la clé est une référence faible et la mémoire est automatiquement libérée après la disparition de l'objet clé.

2. Syntaxe

Méthode
new WeakMap([iterable])
Copier après la connexion

    set(key, value) : Définir (ajouter/mettre à jour) la valeur de la clé à valeur, renvoie l'objet WeakMap.
  1. get(key) : lit la valeur de la clé key, sinon, renvoie undefined.
  2. has(key) : détermine si une paire clé-valeur existe dans un objet WeakMap et renvoie vrai/faux.
  3. delete(key) : supprime une paire clé-valeur et renvoie vrai/faux.
  4. Remarque

En raison du mécanisme spécial de récupération de place de WeakMap, il n'y a pas de méthode clear().

3. Exemple

3. Résolution du problème de fuite de mémoire via WeakMap
let obj = {
  foo: 11
};
let wm = new WeakMap();
wm.set(obj, 413322);
console.log(wm); // {{…} => 413322}
console.log(wm.has(obj)); // true
Copier après la connexion

Lors de l'utilisation de l'objet Dom pour lier des événements, si la mémoire n'est pas libérée à temps après l'objet Dom disparaît (mis à null), il sera toujours stocké en mémoire.


L'utilisation de WeakMap pour enregistrer des objets Dom ne posera pas de tels problèmes, car après la disparition de l'objet Dom, le mécanisme de récupération de place JS libérera automatiquement la mémoire qu'il occupe.

Recommandations associées :
<button type="button" id="btn">按钮</button>
<script>
let wm = new WeakMap();
let btn = document.querySelector(&#39;#btn&#39;);
wm.set(btn, {count: 0});
btn.addEventListener(&#39;click&#39;, () => {
  let v = wm.get(btn);
  v.count++;
  console.log(wm.get(btn).count);
});
// 1 2 3 4 5...
</script>
Copier après la connexion


Partage d'exemples sur la façon de gérer les fuites de mémoire JavaScript

Fuites de mémoire en JavaScript programmes Introduction détaillée du code graphique

Comment gérer les fuites de mémoire JavaScript

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