Heim  >  Artikel  >  Web-Frontend  >  Verwenden von ES6 zur Lösung des Speicherverlustproblems durch WeakMap (ausführliches Tutorial)

Verwenden von ES6 zur Lösung des Speicherverlustproblems durch WeakMap (ausführliches Tutorial)

亚连
亚连Original
2018-05-31 15:30:281720Durchsuche

Dieser Artikel stellt hauptsächlich die detaillierte Erklärung vor, wie ES6 das Speicherverlustproblem durch WeakMap löst. Jetzt teile ich es mit Ihnen und gebe es als Referenz.

1. Map

1. Definieren Sie

Map-Objekt zum Speichern von Schlüssel-Wert-Paaren , ähnlich Bei Datenstrukturwörterbüchern; im Gegensatz zu herkömmlichen Objekten, die nur Zeichenfolgen als Schlüssel verwenden können, können Kartenobjekte jeden Wert als Schlüssel verwenden.

2. Syntax

new Map([iterable])

Attribut

Größe: Gibt die Anzahl der Schlüssel-Wert-Paare zurück.

Operationsmethode

  1. set(key, value): Den Wert des Schlüssels key auf value setzen (hinzufügen/aktualisieren) und das Map-Objekt zurückgeben.

  2. get(key): Liest den Wert des Schlüssels key, wenn nicht, gib undefiniert zurück.

  3. has(key): Bestimmen Sie, ob ein Schlüssel-Wert-Paar in einem Map-Objekt vorhanden ist, und geben Sie true/false zurück.

  4. delete(key): Löscht ein Schlüssel-Wert-Paar und gibt true/false zurück.

  5. clear(): Löscht alle Schlüssel-Wert-Paare im Map-Objekt.

Traversal-Methode

  1. keys(): Gibt das Iterator-Objekt des Schlüsselnamens zurück.

  2. values(): Gibt das Iterator-Objekt des Schlüsselwerts zurück.

  3. entries(): Gibt ein Iterator-Objekt aus Schlüssel-Wert-Paaren zurück.

  4. forEach((value, key, map) => {}): Durchläuft alle Schlüssel-Wert-Paare des Map-Objekts.

3. Beispiel

Operationsmethode

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

Traversal-Methode

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

2. WeakMap

Definition

Im Gegensatz zu Map muss sein Schlüssel ein Objekt sein Der Schlüssel ist eine schwache Referenz und der Speicher wird automatisch freigegeben, nachdem das Schlüsselobjekt verschwindet.

2. Syntax

new WeakMap([iterable])

Methode

  1. set(key, value): Schlüssel festlegen (neu/aktualisieren). Der Wert des Schlüssels ist value und es wird ein WeakMap-Objekt zurückgegeben.

  2. get(key): Lesen Sie den Wert des Schlüssels key, wenn nicht, geben Sie undefiniert zurück.

  3. has(key): Bestimmen Sie, ob ein Schlüssel-Wert-Paar in einem WeakMap-Objekt vorhanden ist, und geben Sie true/false zurück.

  4. delete(key): Löscht ein Schlüssel-Wert-Paar und gibt true/false zurück.

Hinweis

Aufgrund des speziellen Garbage-Collection-Mechanismus von WeakMap gibt es keine clear()-Methode.

3. Beispiel

let obj = {
  foo: 11
};
let wm = new WeakMap();
wm.set(obj, 413322);
console.log(wm); // {{…} => 413322}
console.log(wm.has(obj)); // true

3. Lösung des Speicherleckproblems durch WeakMap

Wann Wenn das Dom-Objekt Ereignisse bindet und der Speicher nach dem Verschwinden des Dom-Objekts nicht rechtzeitig freigegeben (auf Null gesetzt) ​​wird, bleibt es immer im Speicher vorhanden.

Die Verwendung von WeakMap zum Speichern von Dom-Objekten verursacht keine derartigen Probleme, da der JS-Garbage-Collection-Mechanismus nach dem Verschwinden des Dom-Objekts automatisch den von ihm belegten Speicher freigibt.

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

Ich habe das Obige für Sie zusammengestellt und hoffe, dass es Ihnen in Zukunft hilfreich sein wird.

Verwandte Artikel:

Beispiel für Vue in Kombination mit Echarts, um einen Klick-Hervorhebungseffekt zu erzielen

Vue-Methode zum Abrufen der aktuell aktivierten Route

Detaillierte Erläuterung des Echarts-Maus-Overlays mit Hervorhebung von Knoten- und Beziehungsnamen

Das obige ist der detaillierte Inhalt vonVerwenden von ES6 zur Lösung des Speicherverlustproblems durch WeakMap (ausführliches Tutorial). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn