كيفية تحسين تطبيق Next.js للإنتاج

قبل نشر تطبيق Next.js الخاص بك في بيئة الإنتاج، هناك بعض التحسينات والأنماط التي يجب مراعاتها لتحقيق أفضل تجربة مستخدم وأداء وأمان.

توفر هذه الصفحة أفضل الممارسات التي يمكنك استخدامها كمرجع عند بناء تطبيقك وقبل الانتقال إلى الإنتاج، بالإضافة إلى تحسينات Next.js التلقائية التي يجب أن تكون على دراية بها.

التحسينات التلقائية

هذه تحسينات Next.js المضمنة بشكل افتراضي ولا تتطلب أي تكوين:

  • مكونات الخادم (Server Components): يستخدم Next.js مكونات الخادم افتراضيًا. تعمل مكونات الخادم على الخادم ولا تتطلب جافا سكريبت للعرض على العميل. وبالتالي، ليس لها أي تأثير على حجم حزم جافا سكريبت الخاصة بالعميل. يمكنك بعد ذلك استخدام مكونات العميل (Client Components) حسب الحاجة لإضافة التفاعلية.
  • تقسيم الشفرة (Code-splitting): تتيح مكونات الخادم تقسيم الشفرة تلقائيًا حسب مقاطع المسار. يمكنك أيضًا التفكير في التحميل المتأخر (Lazy Loading) لمكونات العميل ومكتبات الطرف الثالث عند الحاجة.
  • الجلب المسبق (Prefetching): عندما يدخل رابط لمسار جديد إلى نطاق رؤية المستخدم، يقوم Next.js بجلب المسار مسبقًا في الخلفية. مما يجعل التنقل إلى المسارات الجديدة شبه فوري. يمكنك إلغاء تفعيل الجلب المسبق عند الحاجة.
  • العرض الثابت (Static Rendering): يقوم Next.js بعرض مكونات الخادم والعميل بشكل ثابت على الخادم أثناء وقت البناء ويخزن النتيجة المعروضة لتحسين أداء تطبيقك. يمكنك اختيار العرض الديناميكي (Dynamic Rendering) لمسارات محددة عند الحاجة.
  • التخزين المؤقت (Caching): يقوم Next.js بتخزين طلبات البيانات ونتائج عرض مكونات الخادم والعميل والموارد الثابتة والمزيد، لتقليل عدد طلبات الشبكة إلى خادمك وقاعدة البيانات وخدمات الخلفية. يمكنك إلغاء تفعيل التخزين المؤقت عند الحاجة.

تهدف هذه الإعدادات الافتراضية إلى تحسين أداء تطبيقك وتقليل التكلفة وكمية البيانات المنقولة في كل طلب شبكة.

أثناء التطوير

أثناء بناء تطبيقك، نوصي باستخدام الميزات التالية لضمان أفضل أداء وتجربة مستخدم:

التوجيه والعرض

معلومة مفيدة: العرض الجزئي المسبق (تجريبي) سيسمح لأجزاء من المسار بأن تكون ديناميكية دون جعل المسار بأكمله يعمل بالعرض الديناميكي.

جلب البيانات والتخزين المؤقت

واجهة المستخدم وإمكانية الوصول

  • وحدة الخطوط (Font Module): حسّن الخطوط باستخدام وحدة الخطوط، التي تستضيف ملفات الخطوط تلقائيًا مع الموارد الثابتة الأخرى، وتزيل طلبات الشبكة الخارجية وتقلل من انزياح التخطيط (Layout Shift).
  • مكون <Image>: حسّن الصور باستخدام مكون الصورة، الذي يحسن الصور تلقائيًا ويمنع انزياح التخطيط ويقدمها بتنسيقات حديثة مثل WebP.
  • مكون <Script>: حسّن نصوص الطرف الثالث باستخدام مكون النص، الذي يؤجل النصوص تلقائيًا ويمنعها من عرقلة الخيط الرئيسي.
  • ESLint: استخدم المكون الإضافي المدمج eslint-plugin-jsx-a11y لاكتشاف مشكلات إمكانية الوصول مبكرًا.

الأمان

البيانات الوصفية وتحسين محركات البحث (SEO)

سلامة النوع

  • TypeScript والمكون الإضافي لـ TypeScript: استخدم TypeScript والمكون الإضافي لـ TypeScript لتحسين سلامة النوع ومساعدتك في اكتشاف الأخطاء مبكرًا.

قبل الانتقال إلى الإنتاج

قبل الانتقال إلى الإنتاج، يمكنك تشغيل next build لبناء تطبيقك محليًا واكتشاف أي أخطاء في البناء، ثم تشغيل next start لقياس أداء تطبيقك في بيئة تشبه الإنتاج.

مؤشرات الأداء الأساسية للويب (Core Web Vitals)

  • Lighthouse: شغّل Lighthouse في وضع التصفح المتخفي لفهم أفضل لكيفية تجربة المستخدمين لموقعك، ولتحديد مجالات التحسين. هذا اختبار محاكاة ويجب إقرانه ببيانات الميدان (مثل مؤشرات الأداء الأساسية للويب).

تحليل الحزم

استخدم المكون الإضافي @next/bundle-analyzer لتحليل حجم حزم جافا سكريبت الخاصة بك وتحديد الوحدات الكبيرة والتبعيات التي قد تؤثر على أداء تطبيقك.

بالإضافة إلى ذلك، يمكن للأدوات التالية مساعدتك في فهم تأثير إضافة تبعيات جديدة إلى تطبيقك: