Next.js: مقدمة إلى Next.js 16

Next.js 16 هو أحدث إصدار من إطار العمل React الشامل الذي طورته Vercel — فهو يدمج توجيه نظام الملفات والعرض من جانب الخادم والتوليد الثابت والتجديد الثابت المتزايد والعرض المسبق الجزئي في إطار تطوير واحد، مما يجعل التطوير الشامل أمرًا بسيطًا.

صُمم هذا البرنامج التعليمي لمطوري الواجهة الأمامية الذين لديهم فهم أساسي لـ React. يبدأ بأساسيات App Router ويأخذك خطوة بخطوة حتى بناء تطبيقات شاملة جاهزة للإنتاج باستخدام Next.js 16.

1. ما ستتعلمه



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 للتخزين المؤقت الذكي.

TSX
// 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.

100%
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

▶ مثال: إنشاء وتشغيل مشروع Next.js 16

المخرجات:

TEXT 📖 للعرض فقط
Diagram: Next.js 16; App Router توجيه نظام الملفات; محرك العرض SSR/SSG/ISR/PPR; جمع البيانات Server Components; مسارات API Route Handlers; أدوات البناء Turbopack.
BASH
# 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

المخرجات:

TEXT 📖 للعرض فقط
▲ Next.js 16.2.10
- Local: http://localhost:3000
✓ Ready in 876ms (Turbopack)

المخرجات:

TEXT 📖 للعرض فقط
خادم التطوير يعمل على http://localhost:3000. افتح هذا الرابط في المتصفح لرؤية صفحة الترحيب الافتراضية لـ Next.js.

▶ مثال: ماذا يمكن لصفحة Next.js أن تفعل؟

TSX
// 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>
  );
}

المخرجات:

TEXT 📖 للعرض فقط
<h1>مرحبًا بك في Next.js 16</h1>
<p>محتوى معروض من الخادم: sunt aut facere repellat provident</p>

المخرجات:

TEXT 📖 للعرض فقط
المتصفح يعرض: عنوان "مرحبًا بك في Next.js 16" ومحتوى معروض من الخادم من API — تم جلب البيانات على الخادم وتسليمها كـ HTML مُعد مسبقًا.


4. من Pages Router إلى App Router

(1) التطور التاريخي

100%
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 هو أن المكونات تُنفذ على الخادم افتراضيًا.

TSX
// 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

المخرجات:

TEXT 📖 للعرض فقط
يعرض واجهة مستخدم مكون Page.
TSX
// ============================================
// 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>;
}

المخرجات:

TEXT 📖 للعرض فقط
Pages Router: 18 سطرًا من الكود (بما في ذلك getServerSideProps)
App Router: 8 أسطر من الكود (مكون async مباشر)
توفير 55% من الكود النموذجي

المخرجات:

TEXT 📖 للعرض فقط
App Router يقلل الكود النموذجي بنسبة 55%: لا حاجة لـ getServerSideProps، مكون async مباشر، وجلب تلقائي للبيانات داخل جسم المكون.


5. نظرة عامة على الميزات الجديدة في Next.js 16

(1) الميزات الأساسية الخمس

100%
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

BASH
# 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

المخرجات:

TEXT 📖 للعرض فقط
Turbopack وقت البدء: 876ms
وقت التحديث الساخن: 3ms
بالمقارنة Webpack بدء التشغيل البارد: 5-10s

المخرجات:

TEXT 📖 للعرض فقط
Turbopack HMR: 4ms لكل تحديث ملف (مقابل 50-200ms مع Webpack). البدء البارد: 876ms (مقابل 5-10s). بناء المشاريع الكبيرة: أسرع بـ 10 مرات إجمالاً.

(3) العرض المسبق الجزئي (PPR)

PPR هو أهم ابتكار في Next.js 16 — يتيح عرض الأجزاء الثابتة من الصفحة مسبقًا كـ HTML، بينما يتم تدفق الأجزاء الديناميكية عبر حدود Suspense.

100%
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 التخزين المؤقت التصريحي

TSX
// 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

المخرجات:

TEXT 📖 للعرض فقط
يجلب البيانات ويعرض النتيجة.
TSX
// ============================================
// 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>
  );
}

المخرجات:

TEXT 📖 للعرض فقط
يعرض الهيكل الثابت فورًا، مع تحميل المحتوى الديناميكي داخل حدود Suspense.
النص المرئي: مرحبًا بك في ShopHub | الفئات | العروض | الدعم
TSX
// 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>
  );
}

المخرجات:

TEXT 📖 للعرض فقط
عند تحميل الصفحة:
1. الرأس الثابت (شريط التنقل) يظهر فورًا
2. منطقة التوصيات تعرض شاشة هيكلية (عنصر نائب رمادي متحرك)
3. بمجرد أن تصبح البيانات جاهزة، يتم عرض 4 بطاقات منتجات متدفقة
4. الزيارات المتكررة لنفس المستخدم خلال ساعة واحدة تُخدم من التخزين المؤقت، لا حاجة لإعادة fetch

(5) التكامل العميق مع React 19

Next.js 16 يأتي مع React 19 مدمجًا ويدعم:

▶ مثال: React 19 Server Actions نموذج سريع

المخرجات:

TEXT 📖 للعرض فقط
تعرض الصفحة كما هو موصوف أعلاه، مع تحديث واجهة المستخدم بناءً على السلوك الموصوف.
TSX
// ============================================
// 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>
  );
}

المخرجات:

TEXT 📖 للعرض فقط
نموذج يحتوي على حقول إدخال وزر إرسال.
عند الإرسال، تعالج server action البيانات وتعيد التوجيه إلى صفحة النجاح.

المخرجات:

TEXT 📖 للعرض فقط
بعد إرسال النموذج:
1. دالة handleSubmit تُنفذ على الخادم
2. formData تجمع حقول النموذج تلقائيًا
3. redirect تنفذ إعادة توجيه 303 من الخادم
4. لا حاجة لكتابة كود API Route / fetch


6. مقارنة الأطر: Next.js مقابل Remix مقابل Nuxt مقابل Astro

(1) تحديد مواقع الأطر الأربعة

100%
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) الحالات غير المناسبة



8. مثال شامل: صفحة تجمع بين استراتيجيات عرض متعددة

TSX
// ============================================
// مثال شامل: صفحة تفاصيل منتج للتجارة الإلكترونية
// الميزات: 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>
  );
}

المخرجات المتوقعة:

TEXT 📖 للعرض فقط
1. معلومات المنتج الأساسية تُعرض فورًا (SSG HTML ثابت)
2. منطقة التوصيات تعرض "جارٍ تحميل التوصيات..." كعنصر نائب
3. قسم التعليقات يعرض "جارٍ تحميل المراجعات..." كعنصر نائب
4. عرض متدفق لمحتوى التوصيات (PPR)
5. محتوى التعليقات المخزنة مؤقتًا يُحدث حسب الحاجة بعد ساعة واحدة (ISR)
6. الصفحة بأكملها تحتوي على بيانات SEO الوصفية كاملة

❓ أسئلة شائعة

س هل يتطلب Next.js 16 React 19؟
ج نعم، Next.js 16 يتضمن React 19 افتراضيًا، وجميع ميزات React 19 الجديدة (Server Actions وuse() وuseOptimistic) متاحة في Next.js. لا تحتاج إلى تثبيت React بشكل منفصل؛ npm create-next-app ستقوم بتثبيت الإصدار المطابق تلقائيًا.
س هل يمكن استخدام App Router وPages Router معًا؟
ج Next.js 15 يدعم استخدامهما معًا، لكن Next.js 16 لم يعد يوصي بـ Pages Router. إذا كان لديك مشروع قديم، التوصية الرسمية هي الترحيل التدريجي إلى App Router. المشاريع الجديدة يجب أن تستخدم App Router دائمًا.
س ما الفرق بين PPR وISR؟
ج PPR (العرض المسبق الجزئي) هو نهج هجين على مستوى أقسام الصفحة — الأجزاء الثابتة تُعرض مسبقًا كـ HTML، بينما الأجزاء الديناميكية تُحمل فورًا. ISR (التجديد الثابت المتزايد) يعمل على مستوى الصفحة — الصفحة بأكملها تُولد بشكل ثابت وتُجدد على فترات منتظمة. ببساطة: PPR = مزيج من المحتوى الثابت والديناميكي داخل صفحة واحدة؛ ISR = الصفحة بأكملها تُحدث على فترات منتظمة.
س ما مدى سرعة Turbopack مقارنة بـ Webpack؟
ج وفقًا للبيانات الرسمية من Next.js، Turbopack أسرع بـ 10 مرات من Webpack في بدء التشغيل البارد (876 ms مقابل 8 s) وأسرع بـ 50 مرة في إعادة التحميل الساخن (3 ms مقابل 150 ms). الفرق أكبر في المشاريع الكبيرة.
س هل Next.js مناسب لبناء واجهات API خلفية؟
ج نعم، لكن لا يُنصح به كخلفية وحيدة. معالجات المسارات في Next.js مناسبة تمامًا لطبقة BFF (Backend for Frontend)؛ للمنطق التجاري المعقد، يُنصح باستخدام خلفية منفصلة (مثل Express أو Fastify). Next.js يركز على الواجهة الأمامية وBFF.
س هل يدعم Next.js 16 الاستضافة الذاتية مع Docker؟
ج نعم. وضع output: 'standalone' في Next.js 16 يمكنه إخراج دليل مستقل، وعند دمجه مع بناء Docker متعدد المراحل ووكيل Nginx العكسي، يمكن تحقيق نشر مستضاف ذاتيًا.

📖 ملخص


📝 تمارين

  1. سؤال أساسي (⭐): اقرأ الصفحة الرئيسية الرسمية لـ Next.js 16 (nextjs.org) واشرح، بكلماتك الخاصة، المبادئ الأساسية الثلاثة لـ Next.js (50 حرفًا أو أقل).

  2. تمرين متقدم (⭐⭐): استخدم create-next-app لإنشاء مشروع جديد (npx create-next-app@latest my-app --ts --tailwind)، وشغّل خادم التطوير، والتقط لقطة شاشة لمخرجات الطرفية، وأبرز وقت بدء تشغيل Turbopack.

  3. تحدٍّ (⭐⭐⭐): اختر مشروعًا قمت ببنائه سابقًا باستخدام React SPA (أو منتجًا تعرفه) وحلل أي الأجزاء يجب أن تستخدم SSG، وأيها يجب أن تستخدم SSR، وأيها يمكن أن تستخدم PPR إذا تمت إعادة كتابة المشروع باستخدام Next.js 16. اكتب خطة ترحيل لا تتجاوز 200 حرف.

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%