WeakRef - proposal untuk menambah standar skrip ECMAS

Dia menulis posting kecil di saluran telegramnya. Saya pikir itu mungkin menarik bagi para pembaca Habr.


Baru-baru ini, sebuah artikel di blog V8 didedikasikan untuk program WeakRef (Stage 3) yang baru - "Referensi dan finalizer yang lemah".


Saya akan mencoba menjelaskan dengan kata-kata saya sendiri esensinya dengan contoh. Bayangkan Anda memiliki semacam pemrosesan gambar di browser Anda, misalnya, tanda air diterapkan pada mereka (saya setuju, contohnya tidak terlalu realistis), dan kemudian gambar-gambar ini entah bagaimana digunakan. Tanda air ditumpangkan oleh fungsi yang secara intensif mengkonsumsi CPU. Gambar dapat diulang, oleh karena itu, agar tidak memuat prosesor sekali lagi, kami membuat cache gambar dengan tanda air di Map , biarkan nama file gambar menjadi kuncinya. Tapi di sini muncul masalah jika beberapa gambar tidak akan digunakan oleh kami, masih akan ada dalam memori, karena Map akan kunci untuk itu (referensi kuat). Oleh karena itu, agar Map kami tidak memakan memori berlebih, perlu untuk menentukan situasi seperti itu dan membersihkan cache dengan tangan Anda. Ini sangat tidak nyaman.


Di sinilah WeakRef datang untuk menyelamatkan. Menggunakan WeakRef, Anda dapat membuat tautan yang lemah ke gambar dan menulisnya dengan kunci alih-alih gambar itu sendiri:


 const wr = new WeakRef(image); cache.set(name, wr); //    const ref = cache.get(name); const image = ref.deref(); 

Dalam hal ini, pengumpul sampah akan dapat secara mandiri menentukan situasi ketika gambar dalam cache tidak lagi diperlukan dan menghapus memori. Untuk menghapus kunci dari Peta dalam proposal, diusulkan untuk menggunakan API FinalizationGroup tambahan.


Fakta yang menarik. Di awal artikel, kami memberikan gambaran kecil tentang WeakMap dan WeakSet yang sudah termasuk dalam standar. Ternyata nama paling formal untuk hubungan yang digunakan dalam WeakMap adalah Ephemeron.


https://v8.dev/features/weak-references

Source: https://habr.com/ru/post/id460297/


All Articles