كتب وظيفة صغيرة في قناته برقية. اعتقدت أنه قد يكون من مصلحة قراء هبر.
في الآونة الأخيرة ، ظهرت مقالة حول مدونة WeakRef (المرحلة 3) الجديدة - "المراجع الضعيفة والنهائية" - على مدونة V8.
سأحاول أن أشرح بكلماتي جوهرها بالقدوة. تخيل أن لديك نوعًا من معالجة الصور في متصفحك ، على سبيل المثال ، يتم تطبيق علامة مائية عليها (أوافق ، المثال غير واقعي للغاية) ، ثم يتم استخدام هذه الصور بطريقة ما. يتم تثبيت العلامة المائية بواسطة وظيفة تستهلك وحدة المعالجة المركزية بشكل مكثف. يمكن تكرار الصور ، وبالتالي ، حتى لا يتم تحميل المعالج مرة أخرى ، فإننا نقوم بإنشاء ذاكرة تخزين مؤقت للصور مع علامة مائية في Map
، دع اسم ملف الصورة هو المفتاح. ولكن هنا تنشأ مشكلة إذا لم يتم استخدام بعض الصور من قبلنا ، فستظل موجودة في الذاكرة ، حيث إن Map
ستكون مفتاحها (مرجع قوي). لذلك ، حتى لا تستهلك خريطتنا ذاكرة زائدة ، من الضروري تحديد مثل هذه الحالات بطريقة ما وتنظيف ذاكرة التخزين المؤقت بيديك. هذه ليست مريحة للغاية.
هذا هو المكان الذي يأتي WeakRef لإنقاذ. باستخدام WeakRef ، يمكنك إنشاء رابط ضعيف لصورة وكتابتها بالمفتاح بدلاً من الصورة نفسها:
const wr = new WeakRef(image); cache.set(name, wr); // const ref = cache.get(name); const image = ref.deref();
في هذه الحالة ، سيكون جامع البيانات المهملة قادرًا على تحديد المواقف بشكل مستقل عندما تكون الصورة في ذاكرة التخزين المؤقت غير ضرورية ومسح الذاكرة. لمسح المفاتيح من Map في الاقتراح ، يُقترح استخدام API FinalizationGroup الإضافي.
حقيقة مثيرة للاهتمام. في بداية المقال ، نقدم نظرة عامة بسيطة على WeakMap و WeakSet المضمنة بالفعل في المعيار. اتضح أن الاسم الأكثر رسمية للعلاقة المستخدمة في WeakMap هو Ephemeron.
https://v8.dev/features/weak-references