- بواسطة x32x01 ||
هل سألت نفسك قبل كده إزاي الـ JavaScript بتتعامل مع الذاكرة؟ 🤔
موضوع مهم جدًا بيأثر على أداء أي تطبيق وهو الـ Garbage Collector واللي مسؤول عن إدارة الميموري وتنظيفها من البيانات اللي مالهاش لازمة.
هنا بتظهر مشكلة اسمها Circular Reference Problem - لأن كل Object شايل Reference للتاني، وده بيمنع الـGarbage Collector من حذفهم حتى لو خلاص مش محتاجهم.
"أي Object مش بيشاور عليه ولا Variable واحد، امسحه من الذاكرة."
يعني لما عدد الـReferences لأي Object يوصل لصفر، يتم مسحه ✅
لكن العيب الكبير؟
لو فيه Circular Reference - مش هيقدر يمسح أي حاجة، لأن كل Object لسه متشاور عليه من التاني 😅
الفكرة إنه بيبدأ من حاجة اسمها Root (زي الـGlobal Object أو الـWindow)، ويمشي يشوف كل العناصر اللي ممكن يوصلها.
أي Object مش ممكن توصله من الـRoot، بيتحذف على طول من الذاكرة.
✅ الميزة: بيحل مشكلة الـCircular Reference.
❌ العيب: بيوقف البرنامج مؤقتًا أثناء المسح (Pause) وبيستهلك موارد أكتر.
📢 لو استفدت من الشرح 😍 شارك المقال مع أصحابك
واكتب في التعليقات إيه أكتر Algorithm شايفه عبقري في طريقة عمله! 💬🚀
موضوع مهم جدًا بيأثر على أداء أي تطبيق وهو الـ Garbage Collector واللي مسؤول عن إدارة الميموري وتنظيفها من البيانات اللي مالهاش لازمة.
🔍 أنواع البيانات في JavaScript
الـJavaScript بتقسم البيانات لنوعين رئيسيين:- Primitive Values: زي الأرقام والنصوص والـBoolean ودي بتتخزن في الـStack مباشرة.
- Reference Values: زي الـObjects والـArrays ودي بتتخزن في الـHeap، والـVariable بيشاور عليها مش بيخزنها فعليًا.
🔄 مشكلة الـCircular Reference
تخيل عندك 3 Objects كل واحد بيشاور على التاني زي سلسلة دايرة على نفسها 🔁هنا بتظهر مشكلة اسمها Circular Reference Problem - لأن كل Object شايل Reference للتاني، وده بيمنع الـGarbage Collector من حذفهم حتى لو خلاص مش محتاجهم.
🧮 أول Algorithm: Reference Counting
الـ Reference Counting Algorithm فكرته بسيطة جدًا:"أي Object مش بيشاور عليه ولا Variable واحد، امسحه من الذاكرة."
يعني لما عدد الـReferences لأي Object يوصل لصفر، يتم مسحه ✅
لكن العيب الكبير؟
لو فيه Circular Reference - مش هيقدر يمسح أي حاجة، لأن كل Object لسه متشاور عليه من التاني 😅
🧹 ثاني Algorithm: Mark-And-Sweep
الـ Mark-And-Sweep Algorithm جاي يحل المشكلة دي 🔥الفكرة إنه بيبدأ من حاجة اسمها Root (زي الـGlobal Object أو الـWindow)، ويمشي يشوف كل العناصر اللي ممكن يوصلها.
أي Object مش ممكن توصله من الـRoot، بيتحذف على طول من الذاكرة.
✅ الميزة: بيحل مشكلة الـCircular Reference.
❌ العيب: بيوقف البرنامج مؤقتًا أثناء المسح (Pause) وبيستهلك موارد أكتر.
⚖️ مقارنة بين Reference Counting وMark-And-Sweep
| الخاصية | Reference Counting | Mark-And-Sweep |
|---|---|---|
| الأداء | سريع ومباشر | أبطأ بسبب عملية المسح |
| مشكلة الـCircular Reference | ❌ ما بيحلهاش | ✅ بيحلها |
| استهلاك الموارد | أقل | أكتر |
| تنفيذ الكود | بدون توقف | بيعمل Pause مؤقت |
💬 الخلاصة
الاثنين ليهم مميزات وعيوب، ومفيش Algorithm كامل، لكن الـ Mark-And-Sweep هو اللي بيُستخدم في JavaScript الحديثة لأنه أكثر أمانًا ودقة في إدارة الذاكرة 🧠✨🔗 نصيحة خفيفة
لو بتشتغل على مشاريع كبيرة، حاول دايمًا تتجنب الـCircular References بإنك تمسح الـReferences اللي مش محتاجها يدويًا (تخليها null) 👌📢 لو استفدت من الشرح 😍 شارك المقال مع أصحابك
واكتب في التعليقات إيه أكتر Algorithm شايفه عبقري في طريقة عمله! 💬🚀
-
01.jpg |38.2 كيلوبايت - المشاهدات: 229 -
02.jpg |12.5 كيلوبايت - المشاهدات: 226 -
03.jpg |15.3 كيلوبايت - المشاهدات: 229 -
04.jpg |16.9 كيلوبايت - المشاهدات: 230 -
05.jpg |18.9 كيلوبايت - المشاهدات: 226 -
06.jpg |19.8 كيلوبايت - المشاهدات: 237 -
07.jpg |22.5 كيلوبايت - المشاهدات: 229 -
08.jpg |23.9 كيلوبايت - المشاهدات: 233 -
09.jpg |24.4 كيلوبايت - المشاهدات: 228
التعديل الأخير: