WeakMap va WeakSet
WeakMap va WeakSet โ Map va Set ning "kuchsiz" (weak) versiyalari. Ular xotira boshqaruvida muhim rol o'ynaydi va bir necha jiddiy cheklovga ega. Avval JavaScript qanday qilib keraksiz obyektlarni xotiradan tozalashini eslaylik.
Erishuvchanlik va axlat yig'uvchi (garbage collector)
JavaScript dvigateli xotirani avtomatik boshqaradi. Obyekt xotirada saqlanadi, chunki unga havola (reference) bor. Havolasi qolmagan (erishib bo'lmaydigan) obyekt "axlat" hisoblanadi va xotiradan tozalanadi.
Muhim jihat: oddiy Map yoki Set o'z kalit/qiymatlariga havolani kuchli saqlaydi. Ya'ni, agar obyekt Map da kalit bo'lsa, boshqa hamma joyda havola yo'qolsa ham, Map uni ushlab turadi va xotiradan tozalanmaydi.
WeakMap kuchsiz havola saqlaydi
WeakMap aynan shu bilan farq qiladi: u kalit-obyektga kuchsiz havola saqlaydi. Agar obyektga boshqa havola qolmasa, u WeakMap da kalit bo'lishiga qaramay, xotiradan tozalanadi (va WeakMap dan ham avtomatik yo'qoladi).
Jiddiy cheklovlar
Kuchsiz havolalar tabiati tufayli WeakMap juda cheklangan:
- Kalit faqat obyekt (yoki simvol) bo'lishi mumkin โ primitiv (satr, son) kalit qilib bo'lmaydi;
- Metodlari faqat:
get,set,has,delete; sizexususiyati yo'q;- Iteratsiya mumkin emas โ
keys(),values(),entries(),forEachyo'q.
weakMap.set('satr', 1) โ TypeError. WeakMap kaliti majburan obyekt bo'lishi kerak.Qo'llanish 1: qo'shimcha ma'lumot saqlash
WeakMap ning asosiy foydasi โ begona obyektga tegib ketmasdan unga qo'shimcha ma'lumot bog'lash. Masalan, tashqi kutubxona bergan obyektlar uchun tashriflar sonini hisoblaymiz:
Agar bu yerda oddiy Map ishlatilsa, foydalanuvchi obyekti dasturda o'chirilganda ham Map undagi yozuvni ushlab turardi. Bu xotira sizishiga (memory leak) olib kelardi. WeakMap bu muammoni hal qiladi.
Qo'llanish 2: keshlash (caching)
Agar funksiya natijasini obyekt bo'yicha keshlamoqchi bo'lsak, WeakMap ideal: obyekt yashaguncha kesh saqlanadi, obyekt yo'qolganda kesh ham avtomatik tozalanadi.
WeakSet
WeakSet โ Set ning kuchsiz varianti. U ham xuddi shunday cheklovlarga ega:
- Faqat obyektlarni saqlaydi (primitivlarni emas);
- Obyekt boshqa joyda erishuvchan bo'lgungacha to'plamda qoladi;
- Metodlari faqat:
add,has,delete; - Iteratsiya va
sizeyo'q.
WeakSet ko'pincha obyektning "ha/yo'q" holatini belgilash uchun ishlatiladi โ masalan, foydalanuvchi saytga tashrif buyurganmi:
Asosiy cheklov va tavsiya
Xulosa
WeakMapvaWeakSetkalit/element obyektlarga kuchsiz havola saqlaydi;- Obyektga boshqa havola qolmasa, u (va tegishli yozuv) avtomatik tozalanadi โ xotira sizishining oldi olinadi;
- Kalit/element faqat obyekt bo'lishi mumkin, primitiv emas;
- Iteratsiya,
size,clear,forEachyo'q; - WeakMap metodlari:
get/set/has/delete; WeakSet metodlari:add/has/delete; - Asosiy qo'llanish: begona obyektlarga qo'shimcha ma'lumot bog'lash va keshlash.