Heim > Artikel > Web-Frontend > Verwenden von ES6 zur Lösung des Speicherverlustproblems durch WeakMap (ausführliches Tutorial)
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
set(key, value): Den Wert des Schlüssels key auf value setzen (hinzufügen/aktualisieren) und das Map-Objekt zurückgeben.
get(key): Liest den Wert des Schlüssels key, wenn nicht, gib undefiniert zurück.
has(key): Bestimmen Sie, ob ein Schlüssel-Wert-Paar in einem Map-Objekt vorhanden ist, und geben Sie true/false zurück.
delete(key): Löscht ein Schlüssel-Wert-Paar und gibt true/false zurück.
clear(): Löscht alle Schlüssel-Wert-Paare im Map-Objekt.
Traversal-Methode
keys(): Gibt das Iterator-Objekt des Schlüsselnamens zurück.
values(): Gibt das Iterator-Objekt des Schlüsselwerts zurück.
entries(): Gibt ein Iterator-Objekt aus Schlüssel-Wert-Paaren zurück.
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
set(key, value): Schlüssel festlegen (neu/aktualisieren). Der Wert des Schlüssels ist value und es wird ein WeakMap-Objekt zurückgegeben.
get(key): Lesen Sie den Wert des Schlüssels key, wenn nicht, geben Sie undefiniert zurück.
has(key): Bestimmen Sie, ob ein Schlüssel-Wert-Paar in einem WeakMap-Objekt vorhanden ist, und geben Sie true/false zurück.
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('#btn'); wm.set(btn, {count: 0}); btn.addEventListener('click', () => { 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!