0Pricing
JavaScript Academy · درس

تجنب تسرّبات الذاكرة — الإغلاقات والمؤقتات والمراجع

امنعوا تسرّبات الذاكرة بمسح المؤقتات، والحد من الإغلاقات، والتخلص من المراجع غير المستخدمة؛ واستخدموا أنماطًا صغيرة يمكن للمبتدئين تطبيقها

تجنب تسرّبات الذاكرة — الإغلاقات والمؤقتات والمراجع درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 3 دروس في المجموع.

ما المقصود بتسرّب الذاكرة؟

الهدف: تجنّب التسريبات البسيطة.

  • احرص دائمًا على مسح المؤقتات
  • لا تحتفظ بـمراجع غير مستخدمة
  • أبقِ الإغلاقات صغيرة
  • فضّل البيانات قصيرة العمر
تجنب تسرّبات الذاكرة — الإغلاقات والمؤقتات والمراجع — رسم توضيحي 1

إيقاف الفواصل الزمنية

احتفظ بـ id الخاص بالفاصل؛ واستدعِ clearInterval أثناء التنظيف حتى يمكن جمع المؤقت والبيانات التي يلتقطها.

// Start an interval and then clear it to avoid leaks
function startTicker() {
  // store id so we can clear later
  const id = setInterval(function () {
    // work would run every X ms; omitted for demo
  }, 1000);

  // simulate screen close / cleanup
  clearInterval(id);
  console.log("interval cleared");
}

startTicker();
تجنب تسرّبات الذاكرة — الإغلاقات والمؤقتات والمراجع — رسم توضيحي 2

إغلاقات أصغر

تحتفظ الإغلاقات بكل ما تلتقطه. التقط قيمًا صغيرة بدلًا من كائنات كاملة كلما أمكن.

// Avoid capturing large objects when only small data is needed
function makeReporter(bigArray) {
  // BAD: store the whole array inside the closure
  const large = bigArray;

  return function reportLength() {
    // Only the length is used
    return large.length;
  };
}

// BETTER: capture only what you need
function makeReporterBetter(bigArray) {
  const count = bigArray.length; // small number
  return function reportLength() {
    return count;
  };
}

const arr = new Array(1000).fill(0);
const bad = makeReporter(arr);
const good = makeReporterBetter(arr);
console.log("bad:", bad(), "good:", good());
تجنب تسرّبات الذاكرة — الإغلاقات والمؤقتات والمراجع — رسم توضيحي 3

ضع حدودًا للمخازن المؤقتة

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

// A growing buffer can leak if never trimmed or reset
const buffer = []; // module-level array

function logItem(x) {
  buffer.push(x); // grows forever if not managed
}

// Simulate usage
logItem("a");
logItem("b");

// FIX: trim or reset when size is over a limit
function trimBuffer(limit) {
  if (buffer.length > limit) {
    buffer.length = limit; // drop old items
  }
}

trimBuffer(1);
console.log("buffer size:", buffer.length);
تجنب تسرّبات الذاكرة — الإغلاقات والمؤقتات والمراجع — رسم توضيحي 4

لمحة عن WeakMap

يفيد WeakMap في إرفاق البيانات الوصفية من دون منع جامع البيانات المهملة من تحرير كائن المفتاح.

// WeakMap holds keys weakly: when the object is gone, the entry can be collected
const meta = new WeakMap();

function attachMeta(obj, info) {
  meta.set(obj, info);
}

function readMeta(obj) {
  return meta.get(obj); // undefined if not set or collected
}

let user = { name: "Ayla" };
attachMeta(user, { seen: true });
console.log("meta now:", readMeta(user));

// Later: drop the only strong reference
user = null; // after this, the object and its metadata can be GC'd at some point
console.log("object reference dropped (cannot show GC in console)");
تجنب تسرّبات الذاكرة — الإغلاقات والمؤقتات والمراجع — رسم توضيحي 5

ممارسات منع تسرّب الذاكرة

قائمة التحقق:

  • خزّن معرّفات المؤقتات؛ واستدعِ clearInterval/clearTimeout عند التنظيف.
  • التقط القيم المطلوبة فقط داخل الإغلاقات.
  • قلّص حجم المصفوفات والخرائط طويلة العمر أو أعد ضبطها.
  • فضّل البيانات قصيرة العمر؛ وتخلّص من المراجع عند الانتهاء.
تجنب تسرّبات الذاكرة — الإغلاقات والمؤقتات والمراجع — رسم توضيحي 6

اختبار تنظيف المؤقتات

فحص سريع: المؤقتات وتسريبات الذاكرة.

تجنب تسرّبات الذاكرة — الإغلاقات والمؤقتات والمراجع — رسم توضيحي 7

مراجعة

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

تجنب تسرّبات الذاكرة — الإغلاقات والمؤقتات والمراجع — رسم توضيحي 8

الأسئلة الشائعة

هل درس «تجنب تسرّبات الذاكرة — الإغلاقات والمؤقتات والمراجع» مجاني؟

نعم — نص درس «تجنب تسرّبات الذاكرة — الإغلاقات والمؤقتات والمراجع» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 3 دروس في المجموع.

ماذا ستتعلم في «تجنب تسرّبات الذاكرة — الإغلاقات والمؤقتات والمراجع»؟

امنعوا تسرّبات الذاكرة بمسح المؤقتات، والحد من الإغلاقات، والتخلص من المراجع غير المستخدمة؛ واستخدموا أنماطًا صغيرة يمكن للمبتدئين تطبيقها تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟

لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 3.

كم من الوقت يستغرق درس «تجنب تسرّبات الذاكرة — الإغلاقات والمؤقتات والمراجع»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟

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

جميع الدروس في هذه الدورة

  1. أساسيات Big-O والمسارات الساخنة مقابل الباردة (مكاسب للمبتدئين)
  2. تجنب تسرّبات الذاكرة — الإغلاقات والمؤقتات والمراجع
  3. مقدمة إلى تحديد الأداء (Node/DevTools) — عادات توقيت صغيرة
← العودة إلى JavaScript Academy