جلب البيانات مرتين في وقت واحد
جزء من قسم أساسيات Next.js في رحلة React على Coddy — الدرس 25 من 47.
عادةً ما تحتاج الصفحة إلى أكثر من شيء واحد. الطريقة البديهية لكتابتها هي أيضًا الطريقة البطئية:
const dishes = await getDishes(); // 60ms
const drinks = await getDrinks(); // 60ms، يبدأ فقط الآن
// الإجمالي: 120msawait تعني توقف هنا. عملية التحميل الثانية لا تبدأ حتى تنتهي الأولى تمامًا، على الرغم من أنها لم تكن بحاجة أبدًا إلى نتيجة الأولى.
ابدأهما معاً، ثم انتظر كليهما:
const [dishes, drinks] = await Promise.all([
getDishes(),
getDrinks(),
]);
// الإجمالي: 60msالخدعة تكمن في التوقيت. استدعاء getDishes() بدون await يبدأ العمل ويعيد وعدًا (promise) على الفور، لذا ببلوع الوقت الذي يبدأ فيه Promise.all بالانتظار، يكون كلا الـ loads قيد التشغيل بالفعل. ويتم حلّه إلى مصفوفة من النتائج، بالترتيب الذي أدرجته.
القاعدة الذهبية:
- تحميل واحد يحتاج إلى نتيجة الآخر ← استخدام
awaits بشكل متتالي، لا يوجد خيار آخر - إنها independent ← استخدام
Promise.all
تحميلان هما إنجاز صغير. أما خمسة تحميلات فهي الفارق بين صفحة تشعر أنها فورية وأخرى لا تشعر بذلك.
التحدي
سهليقوم app/page.jsx بتحميل المأكولات والمشروبات واحداً تلو الآخر. لا توجد علاقة بينهما، لذا قم بتشغيلهما معاً.
- استبدل عمليتي
awaitالمتسلسلتين بعمليةawait Promise.all([...])واحدة، مع تفكيك النتيجة إلىdishesوdrinks.
الملف lib/data.js مغلق، ويراقب ما إذا كان التحميلان قد تداخلا. يجب أن ينتهي الأمر بـ #report لقراءة Ran together بدلاً من Ran one at a time.
جرّب بنفسك
import './globals.css';
export const metadata = {
title: 'My App',
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس أساسيات Next.js
4الخادم والعميل (Server & Client)
نوعان من المكوناتقراءة الخطأسطر 'use client'الحفاظ على أجزاء العميل صغيرةخادم داخل عميلملخص: الخادم والعميل2التوجيه والروابط
المجلدات هي مسارات التوجيهالمسارات المتداخلةربط الصفحاتالمسارات الديناميكيةصفحات غير موجودةملخص: التوجيه5البيانات على الخادم
المكونات غير المتزامنة (Async Components)انتظار معلمات المسار (Route Params)جلب البيانات مرتين في وقت واحدحالات التحميلالتعامل مع الأخطاءملخص: جلب البيانات3التخطيطات والبيانات الوصفية
التخطيط الرئيسيالتنقل المشتركالتخطيطات المتداخلةالبيانات الوصفية للصفحةالبيانات الوصفية الديناميكيةملخص: التخطيطات6إجراءات الخادم (Server Actions)
ما هو إجراء الخادم (Server Action)؟نماذج تعمل وتتفاعلقراءة بيانات النموذجتحديث الصفحةملخص: إجراءات الخادم