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 لا يعترض تحديثات السياق).