I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

إزاي تتجنب تسريب الذاكرة (Memory Leaks) في تطبيقات Vue 3 وتخلي موقعك طيارة

إزاي تتجنب تسريب الذاكرة (Memory Leaks) في تطبيقات Vue 3 وتخلي موقعك طيارة أكيد مريت بالموقف ده قبل كده: تطبيقك شغال زي الفل في البداية، ومع الوقت وبما إن المست

إزاي تتجنب تسريب الذاكرة (Memory Leaks) في تطبيقات Vue 3 وتخلي موقعك طيارة
Reading Count: 1

إزاي تتجنب تسريب الذاكرة (Memory Leaks) في تطبيقات Vue 3 وتخلي موقعك طيارة

أكيد مريت بالموقف ده قبل كده: تطبيقك شغال زي الفل في البداية، ومع الوقت وبما إن المستخدم بيتنقل بين الصفحات، بتلاحظ إن المتصفح بيبدأ "يهنج" (Lag) أو استهلاك الـ RAM بيزيد بشكل غريب. ده يا صديقي غالباً بيكون بسبب تسريب الذاكرة (Memory Leaks)، والسبب الرئيسي في كتير من الأحيان هو الـ Event Listeners أو الـ Timers اللي بتفضل شغالة في الخلفية حتى بعد ما المكون (Component) يختفي من الصفحة. النهاردة هنتكلم عن إزاي نسيطر على الموضوع ده في Vue 3.

ليه تسريب الذاكرة (Memory Leaks) بيحصل أصلاً؟

لما بنعمل Listener زي window.addEventListener أو بنستخدم setInterval جوه مكون في Vue، المتصفح بيفضل محتفظ بيهم في الذاكرة حتى لو المكون ده خلاص ملوش وجود في الـ DOM. ده بيخلي الـ Garbage Collector بتاع المتصفح مش قادر يمسح المكون من الذاكرة لأن في "خيط" لسه رابط بينهم. النتيجة؟ تراكم المكونات دي في الذاكرة بيسبب بطء شديد في أداء التطبيق (Performance Degradation).

الخطر الخفي: الـ Event Listeners والـ Timers

في Vue 3 ومع استخدام Composition API، بقينا بنكتب كود أنضف، بس المسؤولية زادت علينا شوية. لو عملت addEventListener في الـ onMounted، لازم وبشكل إجباري تشيله في الـ onUnmounted.

بص على المثال ده للكود اللي بيسبب مشكلة:

// كود بيسبب تسريب ذاكرة - أوعى تعمل كده! import { onMounted } from 'vue'; onMounted(() => { window.addEventListener('resize', handleResize); });

الكود اللي فوق ده لو المكون اتفتح واتقفل كتير، كل مرة هيتضاف فيها Listener جديد للـ window، وتخيل بقى لو عندك 100 مرة، الـ handleResize هيتنفذ 100 مرة في نفس اللحظة! كارثة حقيقية.

الحل السحري: التنظيف (Cleanup) في Vue 3

الحل بسيط جداً وهو استخدام دالة onUnmounted عشان نلغي كل الحاجات اللي عملناها. بص على التصحيح ده:

import { onMounted, onUnmounted } from 'vue'; const handleResize = () => console.log('Resizing...'); onMounted(() => { window.addEventListener('resize', handleResize); }); onUnmounted(() => { window.removeEventListener('resize', handleResize); });

كده إنت ضمنت إن بمجرد ما المكون يختفي من الواجهة، المتصفح هينظف وراه ويمسح الـ Listener ده من الذاكرة، والتطبيق بتاعك هيفضل خفيف وسريع.

نصائح احترافية لتجنب الـ Memory Leaks

  • استخدم الـ Timers بحذر: لو بتستخدم setTimeout أو setInterval، خزن الـ ID بتاعهم في متغير واستخدم clearTimeout أو clearInterval في الـ onUnmounted.
  • الـ Third-party Libraries: لو بتستخدم مكتبة خارجية زي Chart.js أو Leaflet، اتأكد إنك بتعمل destroy() للمكتبة دي لما المكون يختفي، لأنهم غالباً بيعملوا اتصالات مستمرة بالـ DOM.
  • الـ Events المخصصة (Custom Events): لو بتبعت بيانات بين المكونات عبر الـ Event Bus، متنساش تعمل off للـ Event ده عشان متفضلش الـ Callback شغالة في الفراغ.

خاتمة ونصيحة من أخوك المبرمج

يا بطل، المبرمج الشاطر مش بس اللي بيكتب كود بيطلع "نتيجة"، المبرمج الشاطر هو اللي بيكتب كود "مسؤول" عن موارده (Resources). الـ Memory Leaks ممكن تبان حاجة بسيطة في البداية، بس في المشاريع الكبيرة (Enterprise Applications)، هي اللي بتفرق بين تطبيق احترافي وتطبيق بيقع بعد ساعة شغل. اتعود دايماً تسأل نفسك: "هل الحاجة اللي أنا فتحتها دي، أنا قافلها ومظبطها؟".

طور مهاراتك في أدوات الـ Profiling اللي في متصفحك (Chrome DevTools -> Memory Tab)، وشوف بعينك إيه اللي بيتحجز في الذاكرة، دي أحسن طريقة تتعلم بيها فعلياً.


Share

Related posts

Jul 01, 2026 • 1 min read
Reading Count: 5
إزاي تعمل إضافة لمتصفح جوجل كروم (Chrome Extension) باستخدام React و Tailwind CSS؟

إزاي تعمل إضافة لمتصفح جوجل كروم (Chrome Extension) باستخدام React و Tailwind CSS؟ كتير مننا كمبرمجي...

Jun 30, 2026 • 1 min read
Reading Count: 7
دليلك الاحترافي للـ Subqueries المعقدة في Laravel Eloquent

دليلك الاحترافي للـ Subqueries المعقدة في Laravel Eloquent أكيد مريت بالموقف ده: عندك جدول للطلبات (...

Jun 30, 2026 • 1 min read
Reading Count: 9
إزاي تعمل Dynamic A/B Testing احترافي في Next.js باستخدام الـ Middleware

إزاي تعمل Dynamic A/B Testing احترافي في Next.js باستخدام الـ Middleware أكيد مريت بالموقف ده: العمي...