When Not to Memo متى لا تُخزّن

آخر تحديث: 2026-11-03

When Not to Memo متى لا تُخزّن

‏memo و useMemo و useCallback ليست مجانية: فالمقارنة والتخزين يكلّفان شيئاً وتصبح الشيفرة أصعب في القراءة. ومعظم المكوّنات رخيصة العرض، فقد يكون إعادة عرضها أسرع من تذكّر تخطّيها. ومعرفة متى لا تُخزّن أهمّ من رشّ memo في كل مكان. والقاعدة العملية هي القياس أولاً: نسّق التطبيق، وحدّد المكوّنات التي تكلّف وقتاً فعلاً، وحسّن تلك وحدها.

المجموعةالآثار الجانبية والأداء
النوعنمط

ℹ️ ملاحظة يحوّل المحرّر JSX إلى JavaScript ويعرض الواجهة الحقيقية داخل بيئة معزولة؛ تُركَّب المكوّنات تلقائياً دون استدعاء render يدوي.

📝 الصيغة

// حالات لا تحتاج memo عادةً:
// 1. المكوّن يُعرض بسرعة كافية (نص عادي، عدد قليل من العقد)
// 2. الـ props تتغيّر في كل مرة (كائنات حرفية، دوال مضمّنة)
// 3. الحالة تعيش داخل هذا المكوّن، فيعيد الأب عرضه دائماً
<MemoChild style={{ color: 'red' }} onClick={() => go()} />
// ↑ كائن جديد ودالة جديدة في كل عرض يجعلان memo بلا فائدة

القيمة المرجعة:لا قيمة معادة؛ فهذه المدخلات تصف نمط برمجة لا دالة.

▶ مثال

المثال يعمل مباشرة: يُعرض تلقائياً عند التوسيع وتظهر التعديلات فوراً.

الناتج:

أثناء الكتابة تُتخطّى Badge (فغلاف memo يعمل وظيفته)، لكن الضغط على +1 يعيد عرض Badge قطعاً — لأن count إحدى خصائصه. ولا فائدة هنا، وإزالة الغلاف تُبقي الشيفرة أبسط.

💡 النقاط الأساسية

⚠️ تحذير بعد رفع الحالة إلى الأعلى، لا يستفيد مكوّن خصائصه تأتي دائماً من الأب كثيراً من memo.
💡 نصيحة قِس أولاً: استعمل React DevTools Profiler للتأكد من وجود نقطة اختناق عرض فعلية قبل الإلجوء إلى ثلاثية memo.
ℹ️ ملاحظة التجميع التلقائي وميزات التزام في React 18 وما بعده أزالتا كثيراً مما كان يبدو بطيئاً، فلا تحسّن على حدس.
المزيد من الحالات قريباً.

📚 دروس ذات صلة

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

س ماذا يحدث إن غلّفت كل مكوّن بـ memo؟
ج تصير الشيفرة أكثر توتّراً، ولكلفة مقارنة الخصائص ثمنها، والخصائص المضمّنة تُبطلها غالباً — فالتحسين يجب أن يكون مستهدفاً.
س كيف أعرف أن مكوّناً يُعرض ببطء؟
ج سجّل تفاعلاً واحداً عبر React DevTools Profiler وانظر إلى مدّة العرض وعدد مرات العرض لكل مكوّن؛ فأعلى البنود هي نقاط الاختناق.
س ما الأسباب الشائعة لفشل memo؟
ج خصائص كائن أو مصفوفة أو دالة مضمّنة، وعناصر children تُعاد بناؤها في كل عرض، وتغيّرات السياق (فـ memo لا يعترض تحديثات السياق).
Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%