WeakRef - اقتراح لإضافة معيار ECMAScript

كتب وظيفة صغيرة في قناته برقية. اعتقدت أنه قد يكون من مصلحة قراء هبر.


في الآونة الأخيرة ، ظهرت مقالة حول مدونة 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

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


All Articles