"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > إدارة ذاكرة جافا سكريبت وجمع البيانات المهملة

إدارة ذاكرة جافا سكريبت وجمع البيانات المهملة

تم النشر بتاريخ 2024-11-08
تصفح:855

مع نمو تطبيقات JavaScript، يصبح تحسين الأداء أمرًا ضروريًا. أحد الجوانب الحاسمة هو إدارة الذاكرة بكفاءة. تساعد مجموعة البيانات المهملة التلقائية (GC) في JavaScript، ولكن فهم كيفية عملها - وكيفية تجنب تسرب الذاكرة - يمكن أن يؤدي إلى تحسين أداء تطبيقك بشكل كبير. يتعمق هذا المنشور في تقنيات إدارة الذاكرة وسلوك GC المتقدم في محركات JavaScript الحديثة.

تخصيص الذاكرة في جافا سكريبت
تقوم JavaScript تلقائيًا بتخصيص الذاكرة عند الإعلان عن المتغيرات وإلغاء تخصيصها عند عدم الحاجة إليها. ومع ذلك، فإن معرفة كيفية تخصيص الذاكرة - المكدس مقابل الكومة - أمر بالغ الأهمية لإدارة الموارد بكفاءة في التطبيقات المعقدة.

1. ذاكرة المكدس:

  • يخزن القيم الأولية (مثل الأرقام والقيم المنطقية).

  • الوصول إلى LIFO (آخر دخول يخرج أولاً)، مما يجعله أسرع للبيانات الصغيرة.

2. ذاكرة الكومة:

  • تستخدم للأنواع المرجعية مثل الكائنات والوظائف.

  • أكبر حجمًا وأبطأ في الوصول إليها ولكنها مرنة.

كيفية عمل جمع البيانات المهملة
تستخدم JavaScript خوارزمية التحديد والمسح لإزالة الذاكرة غير المستخدمة. عندما لا تتم الإشارة إلى كائن ما، فإنه يصبح "غير مرغوب فيه" ويكون مؤهلاً للتجميع. ومع ذلك، الاعتماد على GC التلقائي يمكن أن يؤدي إلى مشاكل إذا تمت إدارة الذاكرة بشكل سيء.

  • التحديد والمسح: يقوم GC بوضع علامات على الكائنات التي يمكن الوصول إليها بدءًا من الجذر (سياق التنفيذ العام)، وأي كائنات غير محددة تعتبر غير مرغوب فيها.

  • مجموعة البيانات المهملة للأجيال: تستخدم العديد من محركات JavaScript (مثل V8) GC للأجيال، حيث يتم تقسيم الذاكرة إلى أجيال "صغيرة" و"قديمة". الجيل الشاب يجمع الأشياء بشكل متكرر، بينما يتعامل الجيل القديم مع الأشياء طويلة العمر.

تجنب تسرب الذاكرة
حتى مع GC التلقائي، لا يزال من الممكن حدوث تسرب للذاكرة إذا تم الاحتفاظ بالمراجع إلى الكائنات عن غير قصد. تشمل الأسباب الشائعة ما يلي:

  • المتغيرات العالمية غير المقصودة: يمكن أن يؤدي عدم استخدام Let أو const أو var إلى إنشاء متغيرات عامة، مما يمنعها من تجميع البيانات المهملة.
function leak() {
  myGlobalVar = 'I am global';
}
  • عمليات الإغلاق: عمليات الإغلاق المستخدمة بشكل غير صحيح يمكن أن تحتفظ بالإشارات إلى المتغيرات الخارجية لفترة أطول من اللازم.
function outer() {
  let largeObject = { /* some data */ };
  return function inner() {
    console.log(largeObject);
  };
}
  • مستمعي الأحداث: يمكن أن يؤدي نسيان إزالة مستمعي الأحداث المرتبطة بعناصر DOM إلى الاحتفاظ بالذاكرة المخصصة حتى بعد إزالة العنصر من DOM.
const element = document.getElementById('myButton');
element.addEventListener('click', () => console.log('Clicked'));
// Be sure to remove listeners when not needed
  • عقد DOM المنفصلة: إذا تمت إزالة عقد DOM مع استمرار الإشارة إليها في مكان آخر في الكود، فلن يتم تحرير الذاكرة.
const element = document.getElementById('myElement');
document.body.removeChild(element);

تقنيات متقدمة لتحسين الذاكرة

1.ملف تعريف الذاكرة اليدوي: استخدم أدوات مطور المتصفح لتحديد ملف تعريف استخدام الذاكرة واكتشاف التسريبات أو الكائنات التي تستمر دون داع.

  • Chrome DevTools: علامة تبويب الذاكرة للقطات الكومة.

  • فايرفوكس: أداة أداء لتسرب الذاكرة.

2.WeakMaps وWeakSets: عندما تريد تخزين الكائنات دون منع جمع البيانات المهملة، استخدم WeakMap أو WeakSet. تسمح هذه الهياكل باستخدام GC تلقائيًا في حالة عدم وجود مراجع أخرى للكائنات.

let wm = new WeakMap();
let obj = {};
wm.set(obj, 'someValue');
obj = null; // 'obj' is now eligible for GC.

3. تحسين الحلقات والتكرار: تجنب استهلاك الذاكرة غير الضروري في الوظائف العودية باستخدام تحسين الاستدعاء الخلفي أو الأساليب التكرارية. كن حذرًا أيضًا مع الحلقات الكبيرة أو عمليات المصفوفة التي يمكن أن تسبب طفرات في الذاكرة.

4.التأجيل والتحميل البطيء: تحسين استخدام الذاكرة عن طريق تأجيل أو التحميل البطيء للنصوص البرمجية والأصول التي ليست هناك حاجة إليها على الفور، مما يمنع استهلاك الذاكرة غير الضروري.

خاتمة:

بينما يتعامل جامع البيانات المهملة في JavaScript مع الكثير من المهام الثقيلة، فإن مراعاة كيفية تخصيص الذاكرة وتحريرها يمكن أن يؤدي إلى تحسين الأداء، خاصة في التطبيقات المعقدة أو طويلة التشغيل. ومن خلال تطبيق إستراتيجيات إدارة الذاكرة هذه، ستضمن بقاء تطبيقاتك عالية الأداء أثناء توسعها.


شكرا على القراءة! لا تتردد في مشاركة أفكارك أو أي نصائح متقدمة لإدارة الذاكرة تستخدمها في مشاريعك الخاصة.؟؟
قم بزيارة موقع الويب الخاص بي:https://shafayet.zya.me


ميمي بالنسبة لك؟

JavaScript Memory Management and Garbage Collection

بيان الافراج تم نشر هذه المقالة على: https://dev.to/shafayeat/javascript-memory-management-and-garbage-collection-2a?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3