0Pricing
React Academy · درس

بث SSR من الحافة

ابث مخرجات HTML الخاصة بـ React باستخدام ReadableStream كي يعرض المتصفح المحتوى المفيد فورًا

بث SSR من الحافة درس مجاني في React Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

ميزة البث

عندما يبث الخادم HTML، يستقبل المتصفح المحتوى ويصيّره على شكل أجزاء بدلًا من انتظار اكتمال المستند بأكمله. وهذا يعني أن المستخدمين يرون الأجزاء الظاهرة من الصفحة ويتفاعلون معها، مثل الترويسة والتنقل والقسم الرئيسي، بينما لا تزال الأقسام الأبطأ التي تعتمد على البيانات قيد التحميل.

renderToReadableStream مع bootstrapScripts

يخبر تمرير bootstrapScripts إلى renderToReadableStream React بمكان حزمة JavaScript من جهة العميل. وتُدخل React وسم script في نهاية الدفق، لكي يحمّل المتصفح الحزمة ويستدعي hydrateRoot، فتصبح الصفحة تفاعلية مع اكتمال بث كل قسم.

حدود Suspense في الشجرة

يعتمد البث في React على حدود Suspense لتقسيم شجرة المكوّنات إلى أقسام يمكن بثها بشكل مستقل. فالمكوّنات الموجودة داخل حد Suspense والمنتظرة للبيانات، عبر Promise يُلقى، تُبث أولًا بوصفها عناصر نائبة، ثم تُحل لاحقًا ويُبث محتواها الفعلي.

onShellReady: متى يبدأ البث

يُستدعى onShellReady عندما يصبح هيكل HTML غير المعلّق، أي كل ما يقع خارج حدود Suspense، جاهزًا للبث. وهذه هي اللحظة الصحيحة لتعيين رمز حالة HTTP وترويسات الاستجابة، ثم استدعاء pipe(res) أو بدء القراءة من ReadableStream.

لماذا يجب تعيين رموز الحالة أولًا

يجب إرسال رموز حالة HTTP والترويسات قبل بدء جسم الاستجابة. وبما أن البث يبدأ مع onShellReady، فيجب تنفيذ أي منطق لمعالجة الأخطاء، مثل تعيين الحالة 500 أو إجراء إعادة توجيه، قبل بدء تدفق الهيكل؛ إذ يصبح رمز الحالة ثابتًا بمجرد بدء البث.

معالجة الأخطاء: onShellError

يُستدعى onShellError عند حدوث خطأ فادح قبل جاهزية الهيكل، مثل وقوع خطأ في مكوّن من المستوى الأعلى خارج أي حد Suspense. وفي هذه الحالة لا يُبث الهيكل مطلقًا، وينبغي أن تستجيب بصفحة خطأ ثابتة أو تعيد التوجيه إلى مسار خطأ.

معالجة الأخطاء: onError

يُستدعى onError عند حدوث أخطاء قابلة للاسترداد داخل حدود Suspense. ويستطيع React مواصلة بث بقية الصفحة، بينما يعرض الحد الذي حدث فيه الخطأ واجهة الاحتياط الخاصة بالخطأ. استخدم onError للتسجيل، والتقط الخطأ في منصة الرصد لديك دون إيقاف الدفق.

التحسين التدريجي والمهلات الزمنية

إذا استغرقت بيانات حدّ Suspense وقتًا طويلًا، فابثّ الهيكل على أي حال، ودَع الحدّ يخضع لعملية hydration على العميل. نفّذ مهلة زمنية: بعد 5 ثوانٍ، استدعِ abort() على البث إذا لم يُحسم الحدّ، وعندها سيجلب العميل البيانات بنفسه عبر useEffect.

آليات البث في Cloudflare Workers

يمرّر وقت تشغيل Workers الـ ReadableStream مباشرةً بوصفه جسم Response. وتعيد بنية Cloudflare الأساسية توجيه كل جزء إلى متصفح المستخدم فور إنتاج React له، من دون تخزين المستند بأكمله مؤقتًا. وهذا يعني أن أول بايتات HTML تغادر نقطة PoP الطرفية خلال بضعة أجزاء من الألف من الثانية بعد وصول الطلب.

Abort: التحكم في عمليات البث الطويلة

تعيد renderToReadableStream دالةً لإلغاء العملية. إذا أُلغي الطلب، مثلًا عندما ينتقل المستخدم إلى صفحة أخرى، فإن استدعاء abort() يوقف React عن مواصلة العرض ومعالجة البيانات. ويمنع ذلك إهدار موارد الحوسبة على الطلبات التي لم تعد مرتبطة بمستخدم، كما يحافظ على استهلاك Worker لوحدة المعالجة المركزية ضمن حدود معقولة.

ملف زمن الاستجابة من البداية إلى النهاية

مع البث من الحافة، تبدو سلسلة زمن الاستجابة الكاملة كما يلي: 5ms (من الطلب إلى أقرب PoP) + 2ms (بدء Worker البارد) + 8ms (عرض الهيكل) = 15ms حتى أول بايت. ويعرض متصفح المستخدم عنصر LCP من الهيكل، بينما يواصل باقي الصفحة وصوله عبر البث في الخلفية.

توقيت onShellReady

متى تحديدًا يُستدعى ردّ النداء onShellReady أثناء SSR المتدفّق؟

مراجعة الدرس

يوصل SSR المتدفّق من الحافة HTML على أجزاء، مما يحسّن FCP وLCP عبر إرسال الهيكل فورًا. وتقسم حدود Suspense الشجرة إلى أقسام يمكن بثها بشكل مستقل. ويُعد onShellReady الإشارة إلى بدء تمرير البيانات — اضبط رموز الحالة قبل استدعائه. ويتولى onShellError معالجة الإخفاقات الفادحة، بينما يتولى onError معالجة الإخفاقات القابلة للاسترداد، ويمنع abort() إهدار العمل على الطلبات الملغاة.

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

هل درس «بث SSR من الحافة» مجاني؟

نعم — نص درس «بث SSR من الحافة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «بث SSR من الحافة»؟

ابث مخرجات HTML الخاصة بـ React باستخدام ReadableStream كي يعرض المتصفح المحتوى المفيد فورًا تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «بث SSR من الحافة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ما العرض عند الحافة ولماذا يهم؟
  2. React على Cloudflare Workers باستخدام Hono
  3. بث SSR من الحافة
  4. استراتيجيات التخزين المؤقت عند الحافة لتطبيقات React
← العودة إلى React Academy