WeakMap և WeakSet
WeakMap և WeakSet JavaScript-ում
WeakMap և WeakSet տվյալների կառուցվածքներ են, որոնք թույլ հղումներ են պահում օբյեկտների վրա։ Դրանք նախատեսված են իրավիճակների համար, երբ ցանկանում ես պահել տվյալներ, որոնք չեն խոչընդոտում Garbage Collector-ին այդ օբյեկտները ազատել՝ եթե այլևս հղում չկա։
WeakMap-ը նման է Map-ին, սակայն այն ունի հետևյալ սահմանափակումները՝
const wm = new WeakMap();
let user = { name: "Ani" };
wm.set(user, "some metadata");
console.log(wm.get(user)); // "some metadata"
user = null; // Այժմ օբյեկտի վրա հղում չկա => GC կարող է ջնջել այն և WeakMap-ում էլ կմաքրվի
Երբ օգտագործել WeakMap:
WeakSet-ը նման է Set-ին, բայց՝
const ws = new WeakSet();
let user = { name: "Karen" };
ws.add(user);
console.log(ws.has(user)); // true
user = null; // Այժմ օբյեկտը կարող է մաքրվել GC-ի կողմից
Երբ օգտագործել WeakSet:
Հատկություն | Map / Set | WeakMap / WeakSet |
---|---|---|
Կարող են պարունակել primitive արժեքներ | Այո | Ոչ, միայն օբյեկտներ |
Իրականացնում են iterable interface | Այո | Ոչ |
Կարելի է ստանալ ամբողջ պարունակությունը | Այո | Ոչ |
Համատեղելի են GC-ի հետ | Ոչ՝ պահում են ուժեղ հղում | Այո՝ թույլ հղում, GC-ը կարող է մաքրել |
WeakMap և WeakSet նախատեսված են այն իրավիճակների համար, երբ ցանկանում ենք պահել օբյեկտներին կցված տվյալներ՝ առանց խոչընդոտելու դրանց հավաքումը garbage collector-ի կողմից։ Դրանք ուժեղ գործիքներ են՝ memory leak-ից խուսափելու և հիշողության արդյունավետ կառավարում ապահովելու համար։