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

وداعاً لـ useMemo و useCallback: ثورة الـ React Compiler الجديد

وداعاً لـ useMemo و useCallback: ثورة الـ React Compiler الجديد مين فينا كمبرمجي رياكت (React Developers) ما عاناش من كابوس تحسين الأداء؟ دايماً كنا بنحط نفسنا

وداعاً لـ useMemo و useCallback: ثورة الـ React Compiler الجديد
Reading Count: 5

وداعاً لـ useMemo و useCallback: ثورة الـ React Compiler الجديد

مين فينا كمبرمجي رياكت (React Developers) ما عاناش من كابوس تحسين الأداء؟ دايماً كنا بنحط نفسنا في دايرة مفرغة: هل الكومبوننت ده محتاج useMemo؟ طب الفانكشن دي لازم تتعملها useCallback عشان الـ Referential Equality؟ الموضوع ده كان بيخلي الكود شكله معقد (Boilerplate) وبيشتت التركيز عن المهمة الأساسية، وهي بناء واجهات مستخدم مذهلة. بس الخبر الحلو، إن عصر التعب اليدوي ده انتهى رسمياً مع الـ React Compiler الجديد اللي جاي مع React 19.

يعني إيه أصلاً React Compiler؟

ببساطة، الـ React Compiler هو أداة ذكية بتمسح الكود بتاعك قبل ما يتحول لـ JavaScript عادي، وبتفهمه بعمق. زمان، رياكت كانت بتعتمد عليك أنت كمبرمج عشان تقولها: "يا رياكت، الكود ده تقيل، متعمليش ليه إعادة ريندر (Re-render) إلا لو المتغيرات دي اتغيرت". دلوقتي، الـ Compiler بيعمل ده أوتوماتيكياً (Automatic Memoization). هو بيحلل الكود وبيعرف فين الأماكن اللي محتاجة تتحفظ في الذاكرة (Memoized) وفين الأماكن اللي لازم تتحدث، من غير ما تكتب سطر واحد من Hooks التحسين دي.

ليه كنا بنستخدم useCallback و useMemo؟

عشان نفهم العظمة اللي جاية، لازم نفتكر إحنا كنا بنعاني من إيه. في رياكت، أي تغيير بسيط في الـ State أو Props بيخلي الكومبوننت يعمل ريندر من جديد. لو عندك فانكشن متعرفة جوه الكومبوننت، كل مرة بيحصل ريندر، الفانكشن دي بيتعملها إعادة تعريف (Re-creation)، وده بيأثر على الأداء. فكنا بنكتب كود زي ده:


const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);

const handleClick = useCallback(() => {
  console.log('Clicked!');
}, [dependency]);

الكود ده كان بيملي ملفاتنا بـ Dependency Arrays، وغالباً بننسى متغير أو بنحط متغير غلط فالبج (Bug) تطلع، ونقعد نحتار في الـ Infinite Loop. الـ React Compiler شال كل العبء ده من على كتافك.

إزاي الـ Compiler الجديد بيغير اللعبة؟

الـ Compiler مبني على حاجة اسمها React Forget. هو بيحول الكود بتاعك لنسخة "ذكية" بتقدر تعرف تلقائياً إيه الجزء اللي اتغير فعلياً. لو عندك List فيها 100 عنصر، الـ Compiler هيعرف مين فيهم اللي اتغير بس ويحدثه، والباقي هيفضل زي ما هو من غير ما أنت تتدخل. ده معناه:

  • كود أنظف بكتير (Cleaner Code).
  • تقليل احتمالية الأخطاء البشرية.
  • أداء أسرع بكتير لأن الـ Compiler عارف خبايا الكود أكتر من أي مبرمج.
  • توفير وقتك اللي كنت بتضيعه في الـ Optimization.

هل ده معناه إننا مش هنستخدم Hooks تاني؟

لا طبعاً. الـ Hooks زي useState و useEffect لسه موجودة وليها استخداماتها الأساسية في إدارة الـ Lifecycle والـ Side Effects. لكن الـ Hooks الخاصة بالتحسين (Performance Hooks) هي اللي بقت "خلف الكواليس". الـ Compiler بيشتغل في مرحلة الـ Build Time، يعني مفيش أي تأثير سلبي على الأداء في الـ Runtime، بالعكس، التطبيق بتاعك هيكون أسرع من قبل كده بكتير.

نصيحة من أخ لمبرمج زميل

نصيحتي ليك يا صاحبي، متخليش التطور التكنولوجي ده يخليك تكسل تفهم إزاي رياكت بتشتغل من جوه. حتى لو الـ Compiler بيعمل الشغل ده أوتوماتيكياً، لازم تكون فاهم يعني إيه Memoization ويعني إيه Referential Equality. التكنولوجيا بتسهل حياتنا، بس المهندس الشاطر هو اللي فاهم "الماكينة" بتشتغل إزاي. ابدأ جرب الـ React Compiler في مشاريعك الجانبية، وتابع التحديثات أول بأول، لأن رياكت في 2024 و2025 رايحة في حتة تانية خالص.

استعد للمستقبل، والكود بتاعك هيكون أمتع وأسرع بكتير!


Share

Related posts

Jun 13, 2026 • 1 min read
Reading Count: 9
هيكل مجلدات لارافيل 11 و 12: رحلة التبسيط والاحترافية

هيكل مجلدات لارافيل 11 و 12: رحلة التبسيط والاحترافية لو كنت مبرمج لارافيل (Laravel) قديم، أكيد أول...

Jun 13, 2026 • 1 min read
Reading Count: 12
إزاي تعمل CLI Tools احترافية وتسهل حياتك مع Laravel Prompts

إزاي تعمل CLI Tools احترافية وتسهل حياتك مع Laravel Prompts أكيد مريت بالموقف ده: بتبني مشروع كبير،...

Jun 12, 2026 • 1 min read
Reading Count: 6
إزاي تبني أدوات تيرمينال احترافية باستخدام Laravel Prompts

إزاي تبني أدوات تيرمينال احترافية باستخدام Laravel Prompts أكيد مريت بالموقف ده: بتبني سكريبت أتمتة...