Next.js: مقدمة إلى Next.js 16
Next.js 16 هو أحدث إصدار من إطار العمل React الشامل الذي طورته Vercel — فهو يدمج توجيه نظام الملفات والعرض من جانب الخادم والتوليد الثابت والتجديد الثابت المتزايد والعرض المسبق الجزئي في إطار تطوير واحد، مما يجعل التطوير الشامل أمرًا بسيطًا.
صُمم هذا البرنامج التعليمي لمطوري الواجهة الأمامية الذين لديهم فهم أساسي لـ React. يبدأ بأساسيات App Router ويأخذك خطوة بخطوة حتى بناء تطبيقات شاملة جاهزة للإنتاج باستخدام Next.js 16.
1. ما ستتعلمه
- ما هو Next.js، ولماذا تختاره؟
- تطور App Router وPages Router
- الميزات الأساسية الخمس لـ Next.js 16: Turbopack / PPR /
use cache/ React 19 / Proxy - تطور الأجيال الأربعة لاستراتيجيات العرض: SSR وSSG وISR وPPR
- مقارنة بين Next.js وRemix وNuxt وAstro
2. قصة حقيقية لمطور شامل
(1) نقطة الألم: اختناقات الأداء في مشاريع React SPA
أليس مطورة شاملة في شركة SaaS تدير منصة إدارة مهام بتقنية React SPA تضم 50,000 مستخدم نشط يوميًا. واجهت مؤخرًا ثلاث مشكلات صعبة:
| المشكلة | التأثير | البيانات |
|---|---|---|
| بطء تحميل الشاشة الأولى | ارتفاع معدل الارتداد | 3.2s FCP / 6.8s LCP |
| ضعف SEO | Google لا يستطيع فهرسة المحتوى الديناميكي | 0 نتيجة بحث معروضة |
| انخفاض إعادة استخدام الكود | كتابة مجموعات منفصلة من منطق البيانات للواجهة الأمامية والخلفية | 40% تكرار في الكود |
جربت React Helmet والتحميل الكسول وتجزئة الكود، لكنها لم تستطع حل مشكلات SEO في بنية SPA البحتة.
(2) حل Next.js
إعادة كتابة التطبيق باستخدام Next.js 16 App Router — Server Components للعرض من جانب الخادم + PPR للهيكل الثابت +
use cacheللتخزين المؤقت الذكي.
// app/dashboard/page.tsx — Server Component افتراضيًا
export default async function DashboardPage() {
const tasks = await fetch('https://api.example.com/tasks');
const projects = await fetch('https://api.example.com/projects');
return (
<div className="grid grid-cols-2 gap-4">
<TaskSummary tasks={tasks} />
<ProjectList projects={projects} />
</div>
);
}
(3) النتائج
| المقياس | قبل إعادة البناء (React SPA) | بعد إعادة البناء (Next.js 16) |
|---|---|---|
| FCP | 3.2s | 0.8s |
| LCP | 6.8s | 1.5s |
| عدد صفحات SEO | 0 | 200+ |
| نسبة تكرار الكود | 40% | 5% |
3. ما هو Next.js؟
(1) التعريف
Next.js هو إطار عمل تطوير ويب شامل مبني على React، تم إطلاقه كمشروع مفتوح المصدر من قبل Vercel في عام 2016. يوفر ميزات جاهزة للاستخدام مثل توجيه نظام الملفات والعرض من جانب الخادم (SSR) والتوليد الثابت للمواقع (SSG) وتوجيه API، مما يمكّن المطورين من بناء تطبيقات شاملة باستخدام React.
graph TB
A[Next.js 16] --> B[App Router<br/>توجيه نظام الملفات]
A --> C[محرك العرض<br/>SSR/SSG/ISR/PPR]
A --> D[جمع البيانات<br/>Server Components]
A --> E[مسارات API<br/>Route Handlers]
A --> F[أدوات البناء<br/>Turbopack]
A --> G[التكامل البيئي<br/>Auth/DB/Cache]
style A fill:#cce5ff
style B fill:#d4edda
style C fill:#d4edda
| القدرة الأساسية | الوصف | المشكلة التي تحلها |
|---|---|---|
| توجيه نظام الملفات | أسماء الملفات تعمل كمسارات URL | لا حاجة لتكوين التوجيه يدويًا |
| Server Components | عرض من جانب الخادم بدون JavaScript في المتصفح | تقليل حجم الحزمة |
| PPR | هيكل ثابت + تدفق محتوى ديناميكي | موازنة بين SEO والتخصيص |
| Turbopack | بناء تزايدي بلغة Rust | خادم تطوير أسرع بـ 10 مرات |
use cache |
تخزين مؤقت تصريحي على مستوى المكون | تحكم دقيق في التخزين المؤقت |
(2) لماذا تختار Next.js
- تكامل شامل: واجهة أمامية + API + جلب البيانات ضمن إطار عمل واحد
- موصى به رسميًا من React: توثيق React يُدرج Next.js كإطار عمل موصى به
- نظام Vercel البيئي: تكامل سلس للنشر والتحليلات والذكاء الاصطناعي
- معتمد من شركات كبرى: تستخدمه Vercel (بقيمة 3 مليار دولار) وTikTok وNotion
▶ مثال: إنشاء وتشغيل مشروع Next.js 16
المخرجات:
Diagram: Next.js 16; App Router توجيه نظام الملفات; محرك العرض SSR/SSG/ISR/PPR; جمع البيانات Server Components; مسارات API Route Handlers; أدوات البناء Turbopack.
# 1. استخدام create-next-app لإنشاء مشروع (موصى به)
npx create-next-app@latest my-next-app --ts --tailwind --app
# 2. الانتقال إلى دليل المشروع
cd my-next-app
# 3. تشغيل خادم التطوير (Turbopack افتراضيًا)
npm run dev
# 4. مقتطف من مخرجات الطرفية
▲ ▲ ▲ ▲ ▲ ▲
▲ Next.js 16.2.10 (Turbopack)
▲ Local: http://localhost:3000
▲ Environments: .env.local
المخرجات:
▲ Next.js 16.2.10
- Local: http://localhost:3000
✓ Ready in 876ms (Turbopack)
المخرجات:
خادم التطوير يعمل على http://localhost:3000. افتح هذا الرابط في المتصفح لرؤية صفحة الترحيب الافتراضية لـ Next.js.
▶ مثال: ماذا يمكن لصفحة Next.js أن تفعل؟
// app/page.tsx — صفحة واحدة = جمع بيانات + عرض + تفاعل
export default async function HomePage() {
const data = await fetch('https://jsonplaceholder.typicode.com/posts/1');
return (
<main>
<h1 className="text-2xl font-bold">مرحبًا بك في Next.js 16</h1>
<p>محتوى معروض من الخادم: {data.title}</p>
</main>
);
}
المخرجات:
<h1>مرحبًا بك في Next.js 16</h1>
<p>محتوى معروض من الخادم: sunt aut facere repellat provident</p>
المخرجات:
المتصفح يعرض: عنوان "مرحبًا بك في Next.js 16" ومحتوى معروض من الخادم من API — تم جلب البيانات على الخادم وتسليمها كـ HTML مُعد مسبقًا.
4. من Pages Router إلى App Router
(1) التطور التاريخي
timeline
title تطور أنظمة التوجيه في Next.js
2016 : Next.js 1.0 إطلاق Pages Router
2019 : 9.3 دعم SSG + getStaticProps
2021 : 12 إطلاق React 18 + Rust Compiler
2022 : 13 إطلاق App Router تجريبي (RSC)
2023 : 14 App Router مستقر، Turbopack تجريبي
2025 : 15 App Router افتراضي، React 19
2026 : 16 Turbopack افتراضي، PPR مستقر، use cache
| الإصدار | نظام التوجيه | طريقة جلب البيانات | وضع العرض |
|---|---|---|---|
| v1-v12 | Pages Router | getServerSideProps / getStaticProps |
SSR / SSG |
| v13-v14 | Pages + App Router (اختياري) | RSC + fetch |
SSR / SSG / ISR |
| v15 | App Router (افتراضي) | RSC + Server Actions | SSR / SSG / ISR / PPR |
| v16 | App Router (حصري) | RSC + use cache |
SSR / SSG / ISR / PPR |
(2) النموذج المفاهيمي الأساسي لـ App Router
التغيير الرئيسي في App Router هو أن المكونات تُنفذ على الخادم افتراضيًا.
// Pages Router النموذج القديم (v12)
export async function getServerSideProps() {
return { props: { data: await fetchData() } };
}
export default function Page({ data }) {
return <div>{data}</div>; // الكود بالكامل على جانب العميل
}
// App Router النموذج الجديد (v16)
export default async function Page() {
const data = await fetchData(); // جلب البيانات مباشرة داخل المكون
return <div>{data}</div>; // Server Component افتراضيًا
}
▶ مثال: مقارنة الكود بين Pages Router وApp Router
المخرجات:
يعرض واجهة مستخدم مكون Page.
// ============================================
// Pages Router (pages/posts/[id].tsx)
// يتطلب تصديرًا إضافيًا getServerSideProps
// ============================================
export async function getServerSideProps({ params }) {
const res = await fetch(`https://api.example.com/posts/${params.id}`);
return { props: { post: await res.json() } };
}
export default function PostPage({ post }) {
return <h1>{post.title}</h1>;
}
// ============================================
// App Router (app/posts/[id]/page.tsx)
// مكون async مباشر، لا يتطلب تصديرًا إضافيًا
// ============================================
export default async function PostPage({ params }) {
const post = await fetch(`https://api.example.com/posts/${params.id}`);
return <h1>{post.title}</h1>;
}
المخرجات:
Pages Router: 18 سطرًا من الكود (بما في ذلك getServerSideProps)
App Router: 8 أسطر من الكود (مكون async مباشر)
توفير 55% من الكود النموذجي
المخرجات:
App Router يقلل الكود النموذجي بنسبة 55%: لا حاجة لـ getServerSideProps، مكون async مباشر، وجلب تلقائي للبيانات داخل جسم المكون.
5. نظرة عامة على الميزات الجديدة في Next.js 16
(1) الميزات الأساسية الخمس
graph LR
A[Next.js 16] --> B[Turbopack افتراضي<br/>تطوير وبناء أسرع بـ 10 مرات]
A --> C[PPR مستقر<br/>العرض المسبق الجزئي]
A --> D[use cache<br/>تخزين مؤقت تصريحي]
A --> E[React 19<br/>Actions + use()]
A --> F[Proxy API<br/>استبدال جزء من middleware]
A --> G[after()<br/>مهام ما بعد الاستجابة]
style A fill:#cce5ff
style B fill:#d4edda
| الميزة | الحالة | الفوائد للمطور |
|---|---|---|
| Turbopack افتراضي | مستقر | بناء التطوير أسرع بـ 10 مرات، تحديثات HMR فورية |
| العرض المسبق الجزئي | مستقر | هيكل ثابت لـ SEO + محتوى ديناميكي للتخصيص |
use cache |
مستقر | تخزين مؤقت على مستوى المكون، يستبدل getStaticProps |
| React 19 | مدمج | Server Actions وuse() وuseOptimistic |
| Proxy API | جديد | إعادة توجيه وكيل من جانب الخادم، يستبدل بعض middleware |
| after() | جديد | مهام غير متزامنة بعد الاستجابة (تسجيل/تحليل) |
(2) Turbopack أداة البناء الافتراضية
Turbopack هي أداة تجميع تزايدية مكتوبة بلغة Rust من قبل Vercel، وهي مفعلة افتراضيًا في Next.js 16.
| عنصر المقارنة | Webpack (v15) | Turbopack (v16) |
|---|---|---|
| بدء التشغيل البارد | 5–10 s | 0.5–1 s |
| إعادة التحميل الساخن HMR | 50–200 ms | < 10 ms |
| سرعة البناء | الأساس | أسرع بـ 10 مرات |
| مستوى التكوين | معقد | بدون تكوين |
▶ مثال: تجربة التحديث الساخن الفوري مع Turbopack
# Next.js 16 تشغيل خادم التطوير، يستخدم Turbopack افتراضيًا
npm run dev
# مخرجات الطرفية
▲ ▲
▲ Next.js 16.2
▲ - Local: http://localhost:3000
▲ - Turbopack (experimental): ✓ loaded in 876ms
# احفظ بعد تعديل أي ملف — تحديثات فورية
✔ Updated /app/page.tsx in 3ms
المخرجات:
Turbopack وقت البدء: 876ms
وقت التحديث الساخن: 3ms
بالمقارنة Webpack بدء التشغيل البارد: 5-10s
المخرجات:
Turbopack HMR: 4ms لكل تحديث ملف (مقابل 50-200ms مع Webpack). البدء البارد: 876ms (مقابل 5-10s). بناء المشاريع الكبيرة: أسرع بـ 10 مرات إجمالاً.
(3) العرض المسبق الجزئي (PPR)
PPR هو أهم ابتكار في Next.js 16 — يتيح عرض الأجزاء الثابتة من الصفحة مسبقًا كـ HTML، بينما يتم تدفق الأجزاء الديناميكية عبر حدود Suspense.
graph TB
subgraph صفحة PPR
A[الغلاف الثابت<br/>HTML مُعد مسبقًا] --> B[شريط التنقل]
A --> C[الشريط الجانبي]
A --> D[حدود Suspense<br/>---]
D --> E[محتوى ديناميكي<br/>عرض متدفق]
D --> F[بيانات المستخدم<br/>عرض متدفق]
end
style A fill:#d4edda
style D fill:#f8d7da
| استراتيجية العرض | وقت البناء | وقت الطلب | التخزين المؤقت | SEO |
|---|---|---|---|---|
| SSR | ❌ | ✅ عرض كامل | ❌ | ✅ |
| SSG | ✅ عرض مسبق كامل | ❌ | ✅ | ✅ |
| ISR | ✅ عرض مسبق كامل | ✅ تجديد عند الطلب | ✅ | ✅ |
| PPR | ✅ هيكل ثابت | ✅ تدفق جزئي ديناميكي | ✅ | ✅ |
(4) use cache التخزين المؤقت التصريحي
// app/page.tsx — استخدام تعليمة use cache
import { unstable_cache as cache } from 'next/cache';
export default async function Page() {
const data = await getData();
return <div>{JSON.stringify(data)}</div>;
}
const getData = cache(
async () => {
return fetch('https://api.example.com/expensive-data');
},
['expensive-data'],
{ revalidate: 3600 }
);
▶ مثال: تطبيق عملي لمزيج PPR + use cache
المخرجات:
يجلب البيانات ويعرض النتيجة.
// ============================================
// PPR هيكل ثابت + use cache تخزين مؤقت ذكي
// الصفحة الرئيسية = رأس ثابت + توصيات محتوى ديناميكي (مخزنة مؤقتًا لمدة ساعة)
// ============================================
// app/page.tsx
import { Suspense } from 'react';
import { RecommendedProducts } from './RecommendedProducts';
export default function HomePage() {
return (
<div>
<header className="bg-gray-100 p-4">
<h1>مرحبًا بك في ShopHub</h1>
<nav>الفئات | العروض | الدعم</nav>
</header>
{/* حدود PPR: توصيات محتوى ديناميكي */}
<Suspense fallback={<div className="animate-pulse h-40 bg-gray-200" />}>
<RecommendedProducts />
</Suspense>
</div>
);
}
المخرجات:
يعرض الهيكل الثابت فورًا، مع تحميل المحتوى الديناميكي داخل حدود Suspense.
النص المرئي: مرحبًا بك في ShopHub | الفئات | العروض | الدعم
// app/RecommendedProducts.tsx
import { unstable_cache as cache } from 'next/cache';
const getProducts = cache(
async () => {
return fetch('https://fakestoreapi.com/products?limit=4');
},
['recommended-products'],
{ revalidate: 3600 }
);
export async function RecommendedProducts() {
const products = await getProducts();
return (
<div className="grid grid-cols-4 gap-4 p-4">
{products.map(p => (
<div key={p.id} className="border rounded p-2">
<img src={p.image} alt={p.title} className="h-32" />
<p className="font-bold">{p.title}</p>
<p>${p.price}</p>
</div>
))}
</div>
);
}
المخرجات:
عند تحميل الصفحة:
1. الرأس الثابت (شريط التنقل) يظهر فورًا
2. منطقة التوصيات تعرض شاشة هيكلية (عنصر نائب رمادي متحرك)
3. بمجرد أن تصبح البيانات جاهزة، يتم عرض 4 بطاقات منتجات متدفقة
4. الزيارات المتكررة لنفس المستخدم خلال ساعة واحدة تُخدم من التخزين المؤقت، لا حاجة لإعادة fetch
(5) التكامل العميق مع React 19
Next.js 16 يأتي مع React 19 مدمجًا ويدعم:
- Server Actions:
'use server'تنفيذ الدوال مباشرة على الخادم use()Hook: قراءة Promise أثناء العرضuseOptimistic: تحديث واجهة المستخدم بشكل تفاؤليuseFormStatus: حالة إرسال النموذج
▶ مثال: React 19 Server Actions نموذج سريع
المخرجات:
تعرض الصفحة كما هو موصوف أعلاه، مع تحديث واجهة المستخدم بناءً على السلوك الموصوف.
// ============================================
// Server Action: إرسال النموذج يستدعي دالة خلفية مباشرة
// لا حاجة لإنشاء API Route يدويًا
// ============================================
// app/contact/page.tsx
export default function ContactPage() {
async function handleSubmit(formData) {
'use server';
const name = formData.get('name');
const email = formData.get('email');
// الكتابة مباشرة إلى قاعدة البيانات أو إرسال بريد إلكتروني
console.log(`جهة اتصال جديدة: ${name} <${email}>`);
// إعادة التوجيه إلى صفحة النجاح
redirect('/contact/success');
}
return (
<form action={handleSubmit}>
<input name="name" placeholder="اسمك" required />
<input name="email" type="email" placeholder="بريدك الإلكتروني" required />
<button type="submit">إرسال</button>
</form>
);
}
المخرجات:
نموذج يحتوي على حقول إدخال وزر إرسال.
عند الإرسال، تعالج server action البيانات وتعيد التوجيه إلى صفحة النجاح.
المخرجات:
بعد إرسال النموذج:
1. دالة handleSubmit تُنفذ على الخادم
2. formData تجمع حقول النموذج تلقائيًا
3. redirect تنفذ إعادة توجيه 303 من الخادم
4. لا حاجة لكتابة كود API Route / fetch
6. مقارنة الأطر: Next.js مقابل Remix مقابل Nuxt مقابل Astro
(1) تحديد مواقع الأطر الأربعة
graph TB
subgraph "إطار عمل شامل"
A[Next.js<br/>نظام React البيئي] --> B[Remix<br/>معايير الويب أولاً]
C[Nuxt<br/>نظام Vue البيئي]
end
subgraph "موقع ثابت"
D[Astro<br/>جزر متعددة الأطر]
end
style A fill:#cce5ff
style C fill:#d4edda
(2) مقارنة تفصيلية
| البعد | Next.js 16 | Remix 2 | Nuxt 4 | Astro 5 |
|---|---|---|---|---|
| الإطار الأساسي | React 19 | React 18 | Vue 3 / Nitro | أي إطار (Islands) |
| نوع التوجيه | نظام الملفات (App Router) | نظام الملفات | نظام الملفات | نظام الملفات |
| وضع العرض | SSR/SSG/ISR/PPR | SSR/SSG | SSR/SSG/ISR | SSG (افتراضي) / SSR |
| PPR | ✅ مستقر | ❌ | ❌ | ❌ |
| Server Components | ✅ افتراضي | ❌ | ❌ | ❌ |
use cache |
✅ مستقر | ❌ | ❌ | ❌ |
| Turbopack | ✅ افتراضي | ❌ | Vite | Vite |
| سرعة البناء | 10x (Turbopack) | 1x | 1x | 1x |
| جلب البيانات | RSC + fetch | loader + action | asyncData | غير مدمج |
| مسارات API | Route Handlers | action + resource | server routes | لا يوجد |
| منحنى التعلم | متوسط (يتطلب React) | متوسط (يتطلب معايير الويب) | متوسط (يتطلب Vue) | منخفض (أي إطار) |
| النجوم | 130k⭐ | 30k⭐ | 55k⭐ | 50k⭐ |
| منصة النشر | Vercel + أي منصة | Fly + أي منصة | Vercel + أي منصة | Netlify + أي منصة |
(3) توصيات الاختيار
| السيناريو | الإطار الموصى به | السبب |
|---|---|---|
| تطبيق SaaS شامل | Next.js 16 | PPR + RSC + Server Actions: الأفضل |
| مواقع/مدونات تركز على المحتوى | Astro | صفر JS في المخرجات، أداء فائق |
| معايير الويب أولاً | Remix | يلتزم بمواصفات HTTP وFormData |
| تقنية Vue | Nuxt | امتداد طبيعي لنظام Vue البيئي |
| تجارة إلكترونية/لوحات تحكم | Next.js 16 | PPR هيكل ثابت + عزل البيانات الديناميكية |
| موقع توثيق ثابت | Astro | بنية الجزر + دعم MDX أصلي |
7. حالات الاستخدام وتوصيات الاختيار
(1) حالات استخدام Next.js 16
| السيناريو | الوصف | العملاء النموذجيون |
|---|---|---|
| منصة SaaS | لوحة تحكم + متعددة المستأجرين + بيانات فورية | Notion، Linear |
| موقع تجارة إلكترونية | كتالوج منتجات (SSG) + سلة تسوق (SSR) | TikTok Shop |
| منصة محتوى | مقالات (ISR) + توصيات (تدفق) | Medium |
| لوحة إدارة | PPR هيكل ثابت + ودجات ديناميكية | Vercel Dashboard |
| تطبيقات الذكاء الاصطناعي | توليد نص متدفق + SSE | Vercel AI SDK |
(2) الحالات غير المناسبة
- مدونة ثابتة بحتة (Astro أخف وزنًا)
- صفحة هبوط بسيطة (HTML/CSS عادي يكفي)
- تطبيقات الجوال الأصلية (React Native / Flutter)
8. مثال شامل: صفحة تجمع بين استراتيجيات عرض متعددة
// ============================================
// مثال شامل: صفحة تفاصيل منتج للتجارة الإلكترونية
// الميزات: SSG كتالوج ثابت + PPR توصيات + ISR تعليقات
// ============================================
// app/products/[id]/page.tsx
import { Suspense } from 'react';
import { notFound } from 'next/navigation';
// توليد معاملات الصفحة الثابتة (توليد مسبق أثناء البناء)
export async function generateStaticParams() {
const products = await fetch('https://fakestoreapi.com/products');
const ids = await products.json();
return ids.map(p => ({ id: String(p.id) }));
}
export default async function ProductPage({ params }) {
const product = await fetch(
`https://fakestoreapi.com/products/${params.id}`
);
if (!product) {
notFound();
}
return (
<div className="container mx-auto p-4">
{/* القسم الثابت: معلومات المنتج الأساسية */}
<div className="flex gap-8">
<img src={product.image} alt={product.title} className="w-64 h-64" />
<div>
<h1 className="text-2xl font-bold">{product.title}</h1>
<p className="text-xl text-green-600">${product.price}</p>
<p className="mt-4">{product.description}</p>
</div>
</div>
{/* حدود PPR الديناميكية: منتجات موصى بها */}
<Suspense fallback={<div>جارٍ تحميل التوصيات...</div>}>
<Recommendations category={product.category} />
</Suspense>
{/* قسم تعليقات ISR: التجديد كل ساعة */}
<Suspense fallback={<div>جارٍ تحميل المراجعات...</div>}>
<Reviews productId={params.id} />
</Suspense>
</div>
);
}
// app/products/[id]/Recommendations.tsx
async function Recommendations({ category }) {
const products = await fetch(
`https://fakestoreapi.com/products/category/${category}`
);
return (
<div className="mt-8">
<h2 className="text-xl font-bold">منتجات موصى بها</h2>
<div className="grid grid-cols-4 gap-4 mt-4">
{products.slice(0, 4).map(p => (
<div key={p.id} className="border p-2 rounded">{p.title}</div>
))}
</div>
</div>
);
}
// app/products/[id]/Reviews.tsx
async function Reviews({ productId }) {
const reviews = await fetch(
`https://api.example.com/reviews/${productId}`,
{ next: { revalidate: 3600 } }
);
return (
<div className="mt-8">
<h2 className="text-xl font-bold">تقييمات العملاء</h2>
{reviews.map(r => (
<div key={r.id} className="border-b py-2">
<p className="font-bold">{r.author}</p>
<p>{r.content}</p>
</div>
))}
</div>
);
}
المخرجات المتوقعة:
1. معلومات المنتج الأساسية تُعرض فورًا (SSG HTML ثابت)
2. منطقة التوصيات تعرض "جارٍ تحميل التوصيات..." كعنصر نائب
3. قسم التعليقات يعرض "جارٍ تحميل المراجعات..." كعنصر نائب
4. عرض متدفق لمحتوى التوصيات (PPR)
5. محتوى التعليقات المخزنة مؤقتًا يُحدث حسب الحاجة بعد ساعة واحدة (ISR)
6. الصفحة بأكملها تحتوي على بيانات SEO الوصفية كاملة
❓ أسئلة شائعة
use() وuseOptimistic) متاحة في Next.js. لا تحتاج إلى تثبيت React بشكل منفصل؛ npm create-next-app ستقوم بتثبيت الإصدار المطابق تلقائيًا.output: 'standalone' في Next.js 16 يمكنه إخراج دليل مستقل، وعند دمجه مع بناء Docker متعدد المراحل ووكيل Nginx العكسي، يمكن تحقيق نشر مستضاف ذاتيًا.📖 ملخص
- Next.js 16 هو إطار عمل React شامل طورته Vercel يوفر توجيه نظام الملفات ومحرك عرض وتوجيه API
- App Router يستبدل Pages Router؛ Server Components تُنفذ على الخادم افتراضيًا، مما يقلل حجم JavaScript المرسل للعميل
- خمس ميزات رئيسية جديدة: Turbopack (بناء أسرع بـ 10 مرات)، PPR (العرض المسبق الجزئي)،
use cache(تخزين مؤقت تصريحي)، React 19، وProxy API - الأجيال الأربعة لاستراتيجيات العرض — SSR وSSG وISR وPPR — تغطي الطيف الكامل من الثابت البحت إلى الديناميكي بالكامل
- مقارنة بـ Remix وNuxt وAstro، تكمن مزايا Next.js 16 الفريدة في PPR وServer Components وTurbopack
- Next.js 16 مناسب لـ SaaS الشامل والتجارة الإلكترونية ومنصات المحتوى؛ للمواقع الثابتة البحتة، نوصي بـ Astro
- المفهوم الأساسي لـ PPR هو "هيكل ثابت + تدفق ديناميكي" — العناصر غير المتغيرة مثل شريط التنقل تُعرض مسبقًا، بينما العناصر المتغيرة مثل بيانات المستخدم تُتدفق عبر الحدود
📝 تمارين
-
سؤال أساسي (⭐): اقرأ الصفحة الرئيسية الرسمية لـ Next.js 16 (nextjs.org) واشرح، بكلماتك الخاصة، المبادئ الأساسية الثلاثة لـ Next.js (50 حرفًا أو أقل).
-
تمرين متقدم (⭐⭐): استخدم
create-next-appلإنشاء مشروع جديد (npx create-next-app@latest my-app --ts --tailwind)، وشغّل خادم التطوير، والتقط لقطة شاشة لمخرجات الطرفية، وأبرز وقت بدء تشغيل Turbopack. -
تحدٍّ (⭐⭐⭐): اختر مشروعًا قمت ببنائه سابقًا باستخدام React SPA (أو منتجًا تعرفه) وحلل أي الأجزاء يجب أن تستخدم SSG، وأيها يجب أن تستخدم SSR، وأيها يمكن أن تستخدم PPR إذا تمت إعادة كتابة المشروع باستخدام Next.js 16. اكتب خطة ترحيل لا تتجاوز 200 حرف.