التمهيد التدريجي مع التمهيد الانتقائي
استخدم التمهيد الانتقائي في React 18 لإعطاء الأولوية لتمهيد المكوّنات التي يتفاعل معها المستخدم أولًا
التمهيد التدريجي مع التمهيد الانتقائي درس مجاني في React Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.
ما المقصود بـ hydration الانتقائي؟
يُعد hydration الانتقائي ميزة في React 18 تتيح لـ React بدء hydration للمكوّنات فور وصول كود JavaScript الخاص بها، من دون انتظار تنزيل JavaScript للصفحة بأكملها. ويُجري كل قسم مقسّم إلى حزم بشكل مستقل hydration عند تحميل حزمتها، بدلًا من إجراء ذلك لكل الأقسام دفعة واحدة.
React 18: لا مزيد من hydration الشامل دفعة واحدة
قبل React 18، كان hydration يعمل بطريقة "الكل أو لا شيء"؛ إذ كان على React تنزيل JavaScript بالكامل وإجراء hydration لشجرة الصفحة بأكملها قبل أن يصبح أي جزء منها تفاعليًا. أزال React 18 هذا القيد، فأصبحت أجزاء الشجرة تُجري hydration بشكل مستقل عند توفر كودها وبياناتها.
تفاعل المستخدم يمنح hydration الأولوية
إذا نقر المستخدم على حد من حدود Suspense لم تكتمل عملية hydration له بعد أو تفاعل معه، يعطي React الأولوية فورًا لإجراء hydration لتلك الشجرة الفرعية قبل أي عمل آخر معلّق متعلق بـ hydration. وهذا يعني أن العنصر الذي يحاول المستخدم استعماله يصبح تفاعليًا أولًا، حتى إذا لم يكن في ترتيب المستند.
React.lazy وSuspense لتقسيم الكود
يتيح الجمع بين React.lazy والاستيرادات الديناميكية وحدود Suspense إجراء hydration انتقائي للمكوّنات المقسّمة إلى حزم. ينزّل المتصفح حزمة JavaScript الرئيسية أولًا، ويجري hydration لهيكل الصفحة فورًا. ثم يُجري hydration لكل مكوّن محمّل كسولًا عند تنزيل الجزء الخاص به، بشكل تدريجي أثناء جلب المتصفح لهذه الأجزاء.
أثر ذلك في تجربة المستخدم
تتمثل النتيجة في أن المحتوى الظاهر أعلى الصفحة يصبح تفاعليًا قبل تنزيل JavaScript الخاص بالجزء الواقع أسفل الصفحة. يستطيع المستخدم التفاعل مع شريط التنقل وزر الدعوة إلى الإجراء في القسم الرئيسي، بينما لا يزال موجز التعليقات وأداة التوصيات يحمّلان أجزاء JavaScript الخاصة بهما.
قياس الأثر
يقلل hydration الانتقائي من Total Blocking Time (TBT)، وهو المقياس الأساسي لأداء hydration. في علامة التبويب Performance ضمن Chrome DevTools، تُبرز Long Tasks، أي المهام التي تتجاوز 50ms، باللون الأحمر. قبل استخدام hydration الانتقائي، قد ترى مهمة طويلة واحدة مدتها 300ms لإجراء hydration بالكامل؛ وبعده، سترى عدة مهام صغيرة موزعة على فترات زمنية.
تجنّب الاستيرادات العلوية المتعجلة
النمط المضاد الذي يقوّض hydration الانتقائي هو استيراد جميع المكوّنات في أعلى تطبيقك، مثل: import Footer from './Footer'. فهذا يجبر المتصفح على تنزيل كود Footer وتحليله وتنفيذه قبل بدء أي hydration. استبدل الاستيرادات العلوية للمكوّنات الواقعة أسفل الصفحة باستخدام React.lazy والاستيرادات الديناميكية.
الاستيرادات الديناميكية للمحتوى الواقع أسفل الصفحة
استخدم const Footer = React.lazy(() => import('./Footer')) للمكوّنات التي تظهر أسفل إطار العرض الأولي. غلّفها داخل Suspense مع واجهة بديلة بسيطة. وسيخفض المتصفح أولوية جلب حزمة Footer إلى أن يكتمل hydration للمحتوى الظاهر أعلى الصفحة، مما يحسّن TBT تلقائيًا.
التكامل بين البث وhydration الانتقائي
يتكامل البث وhydration الانتقائي؛ إذ يرسل البث أجزاء HTML لتحسين FCP وLCP، بينما يعالج hydration الانتقائي أجزاء JavaScript لتحسين TTI وTBT. ويعالج الأسلوبان معًا بُعدي الأداء، وهما "عرض المحتوى بسرعة" و"جعله تفاعليًا بسرعة".
hydration الانتقائي ومكوّنات خادم React
تدفع مكوّنات خادم React مفهوم hydration الانتقائي إلى أبعد من ذلك؛ إذ لا تنتج مكوّنات الخادم أي JavaScript للعميل على الإطلاق. وتحتاج مكوّنات العميل فقط، أي المعلّمة بـ "use client"، إلى hydration. ويقلل ذلك إجمالي كمية JavaScript التي تحتاج إلى hydration، مما يجعل hydration الانتقائي أكثر فعالية.
بنية عملية لـ hydration الانتقائي
من الأنماط العملية استخدام renderToPipeableStream لبث HTML، وتغليف الصفحة باستدعاء hydrateRoot في الجذر، بدلًا من createRoot، لتمكين وضع hydration، واستخدام React.lazy لجميع الأقسام الواقعة أسفل الصفحة، وتغليف كل قسم داخل حد من حدود Suspense. ويتولى React بقية العمل تلقائيًا.
تفاعل المستخدم وhydration الانتقائي
كيف يؤثر تفاعل المستخدم في أولوية hydration الانتقائي في React 18؟
مراجعة الدرس
يتيح hydration الانتقائي لـ React إجراء hydration للأشجار الفرعية للمكوّنات تدريجيًا عند وصول JavaScript الخاص بها، بدلًا من انتظار الحزمة الكاملة. تمنح تفاعلات المستخدم الأولوية لإجراء hydration للشجرة الفرعية المستهدفة. ويتيح استخدام React.lazy والاستيرادات الديناميكية للمحتوى الواقع أسفل الصفحة، مع حدود Suspense، هذا النمط التدريجي. ويُعد hydration الانتقائي وSSR المبثوث تقنيتين متكاملتين تعالجان معًا أداء توصيل المحتوى والتفاعلية.
الأسئلة الشائعة
هل درس «التمهيد التدريجي مع التمهيد الانتقائي» مجاني؟
نعم — نص درس «التمهيد التدريجي مع التمهيد الانتقائي» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.
ماذا ستتعلم في «التمهيد التدريجي مع التمهيد الانتقائي»؟
استخدم التمهيد الانتقائي في React 18 لإعطاء الأولوية لتمهيد المكوّنات التي يتفاعل معها المستخدم أولًا تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟
لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «التمهيد التدريجي مع التمهيد الانتقائي»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟
نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- البث في React 18: كيف يعمل renderToPipeableStream؟
- حدود Suspense وأولوية البث
- التمهيد التدريجي مع التمهيد الانتقائي
- قياس أثر البث: FCP وTTI وLCP