بنية الجزر: التمهيد الانتقائي
تعلّم كيف تعزل الجزر المكوّنات التفاعلية، بحيث لا تُرسل JavaScript إلا لها بينما يبقى الباقي HTML ثابتًا
بنية الجزر: التمهيد الانتقائي درس مجاني في React Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.
مفهوم الجزر
تتعامل Islands Architecture، التي صاغ Jason Miller اسمها عام 2020، مع صفحة الويب على أنها HTML ثابت في معظمها، يتخلله عدد من «جزر» التفاعلية المعزولة. يُرسل محيط HTML الثابت إلى المتصفح كما هو. ولا تُنزّل JavaScript ولا تُنفّذ إلا للجزر التفاعلية، ما يجعل حجم حزمة JavaScript متناسبًا مع التفاعلية الفعلية.
آلية عمل الجزر
كل جزيرة هي مكوّن تُنفَّذ له Hydration بشكل مستقل. يصيّر الخادم HTML الأولي للجزيرة مع بقية الصفحة. وعندما تُحمّل JavaScript الخاصة بالجزيرة، تُنفَّذ Hydration لشجرة ذلك المكوّن الفرعية فقط. ولا تلمس JavaScript HTML المحيط بالجزر مطلقًا، فهو ثابت فعلًا.
الفرق في حجم حزمة JavaScript
في صفحة منشور مدونة تستخدم Islands Architecture، قد يبلغ حجم حزمة JavaScript خمسة كيلوبايتات لجزيرة زر إعجاب واحدة. أما الصفحة نفسها إذا بُنيت كتطبيق React SPA، فقد ترسل أكثر من 200 كيلوبايت من JavaScript لتنفيذ Hydration للصفحة بأكملها. ويجعل أسلوب الجزر حجم الحزمة متناسبًا مع التفاعلية، لا مع حجم الصفحة.
جزر متعددة الأطر
يدعم Astro، وهو إطار العمل الرائد في Islands Architecture، جزرًا مبنية بأطر عمل مختلفة في الصفحة نفسها. ويمكن أن توجد جزيرة React بجوار جزيرة Vue وبجوار جزيرة JavaScript عادية. تُجمّع كل جزيرة بشكل مستقل، ولذلك لا ينزّل المستخدمون إلا كود إطار العمل الذي تستخدمه الجزر الظاهرة.
client:load — Hydration فورية
تجعل التوجيهية client:load Hydration للجزيرة فورية عند تحميل الصفحة. استخدموها للجزر الظاهرة والتفاعلية فورًا، مثل قائمة التنقل أو قسم الواجهة الرئيسية الذي يتضمن حقل بحث. وهذه هي استراتيجية Hydration الأعلى أولوية.
client:idle — Hydration مؤجلة
تنتظر التوجيهية client:idle حتى تصبح سلسلة التعليمات الرئيسية في المتصفح خاملة، أي بعد تحميل المحتوى المهم، قبل تنفيذ Hydration للجزيرة. وتناسب هذه التوجيهية الأدوات الموجودة أسفل الجزء الظاهر من الصفحة أو التفاعلات الثانوية غير المطلوبة فورًا، مثل شريط المشاركة الاجتماعية.
client:visible — Hydration عند الظهور
تستخدم التوجيهية client:visible Intersection Observer لتنفيذ Hydration للجزيرة فقط عندما تدخل إطار العرض أثناء التمرير. وهي مناسبة للجزر الموجودة في مواضع عميقة من الصفحة، مثل قسم التعليقات أو شريط المنتجات ذات الصلة، التي قد لا يصل إليها معظم المستخدمين. ولا تُحمّل JavaScript حتى الحاجة إليها.
client:only — تخطي SSR
تتخطى التوجيهية client:only التصيير من جهة الخادم بالكامل، ولا تصيّر الجزيرة إلا في المتصفح. ويكون ذلك ضروريًا للمكوّنات التي تستخدم واجهات برمجة تطبيقات خاصة بالمتصفح، مثل window وdocument، أو التي تعتمد على حالة جهة العميل وقت التركيب. والمقابل هو عدم وجود HTML مصيّر على الخادم لتلك الجزيرة.
حل مشكلة Hydration
تحل Islands Architecture مشكلة Hydration الكاملة من خلال ضمان تحميل JavaScript وتنفيذها للمكوّنات التفاعلية فعلًا فقط. فمقالة مدونة تتضمن زر إعجاب لا تنفّذ Hydration إلا لجزيرة زر الإعجاب؛ أما نص المقالة المؤلف من 1200 كلمة والرأس والتذييل فلا ينتج عنها أي تنفيذ لـ JavaScript على العميل.
عزل الحالة بين الجزر
لكل جزيرة حالة معزولة خاصة بها. ولا يمكن للجزر مشاركة حالة React مباشرةً لأنها أشجار React منفصلة. وهذا مقصود؛ فإذا احتاج مكوّنان إلى مشاركة الحالة، فينبغي دمجهما في جزيرة واحدة. أما الاتصال بين الجزر فيستخدم معاملات URL أو أحداث DOM أو مكتبات حالة خفيفة.
النتائج في العالم الحقيقي
تفيد المواقع التي انتقلت من React SPA إلى Islands Architecture، مثل موقع توثيق Astro، بتحسينات كبيرة: تنخفض حِزم JavaScript بنسبة تتراوح بين 70% و90%، ويتحسن TTI بمقدار يتراوح بين ثانيتين وأربع ثوانٍ على الأجهزة المحمولة، وترتفع درجات أداء Lighthouse من ستينياتها إلى أكثر من 90. وتكون المكاسب الأوضح في الصفحات الغنية بالمحتوى.
استراتيجيات ترطيب الجزر
ما توجيه Astro الذي يُرطّب المكوّن فقط عند تمريره إلى إطار العرض؟
مراجعة الدرس
تحافظ بنية الجزر على معظم الصفحة بصيغة HTML ثابتة، ولا تُرطّب إلا المكوّنات التفاعلية المعزولة. يوفّر Astro توجيهات للترطيب: client:load (فورًا)، وclient:idle (بعد دخول المتصفح في حالة الخمول)، وclient:visible (عند التمرير)، وclient:only (العرض على العميل فقط). يُرطّب كل جزيرة بشكل مستقل، مما يجعل كمية JavaScript متناسبة مع مستوى التفاعل بدلًا من حجم الصفحة.
الأسئلة الشائعة
هل درس «بنية الجزر: التمهيد الانتقائي» مجاني؟
نعم — نص درس «بنية الجزر: التمهيد الانتقائي» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.
ماذا ستتعلم في «بنية الجزر: التمهيد الانتقائي»؟
تعلّم كيف تعزل الجزر المكوّنات التفاعلية، بحيث لا تُرسل JavaScript إلا لها بينما يبقى الباقي HTML ثابتًا تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟
لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «بنية الجزر: التمهيد الانتقائي»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟
نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مشكلة التمهيد الكامل
- بنية الجزر: التمهيد الانتقائي
- إعداد Astro وجزر React
- قياس الأداء: Lighthouse وCore Web Vitals