التحسين التلقائي للصور

الصور غير المحسنة

باستخدام HTML العادي، قمنا بإضافة صورة البطل (Hero) كما يلي:

<img src="large-image.jpg" alt="Large Image" />

ومع ذلك، هذا يعني أننا يجب أن نقوم يدويًا بتحسين بعض الأشياء مثل:

  • التأكد من أن صورتنا متجاوبة مع أحجام الشاشات المختلفة.
  • تحسين صورنا باستخدام أدوات أو مكتبات خارجية.
  • التحميل البطيء (Lazy-loading) للصور عند دخولها نطاق الرؤية.

مكون الصورة

يقدم Next.js مكون الصورة الذي يمكنه التعامل مع هذه التحسينات مباشرةً.

next/image هو امتداد لعنصر HTML img، تم تطويره ليتناسب مع الويب الحديث.

هذا يعني أن تغيير الحجم، التحسين، وعرض الصور بصيغ حديثة مثل WebP (عندما يدعمها المتصفح) يمكن أن يتم تلقائيًا باستخدام next/image.

يتجنب المكون إرسال صور كبيرة إلى أجهزة بشاشات صغيرة، ويسمح لـ Next.js باعتماد صيغ الصور المستقبلية وعرضها للمتصفحات التي تدعمها.

يعمل التحسين التلقائي للصور مع أي مصدر للصور. حتى إذا كانت الصورة مستضافة على مصدر بيانات خارجي، مثل نظام إدارة المحتوى (CMS)، فلا يزال يمكن تحسينها.

كيف يعمل التحسين التلقائي للصور؟

التحسين عند الطلب

بدلاً من تحسين الصور أثناء وقت البناء، يقوم Next.js بتحسين الصور عند طلبها من قبل المستخدمين. على عكس مولدات المواقع الثابتة والحلول الثابتة فقط، لا تزيد أوقات البناء سواء كنت ترسل عشر صور أو عشرة ملايين صورة.

الصور ذات التحميل البطيء

يتم تحميل الصور بشكل بطيء افتراضيًا. لن تتأثر سرعة الصفحة بالصور الموجودة خارج نطاق الرؤية. يتم تحميل الصور فقط عندما تدخل نطاق الرؤية.

تجنب تحول التخطيط التراكمي (CLS)

يتم عرض الصور دائمًا لتجنب تحول التخطيط التراكمي (Cumulative Layout Shift - CLS).

استخدام مكون الصورة

لنقم بتحديث التطبيق باستخدام next/image لعرض صورة البطل. يجب أن تكون خاصيات الارتفاع والعرض هي الحجم المطلوب للعرض، بنسبة أبعاد مطابقة للصورة الأصلية.

افتح ملف pages/index.js وأضف استيرادًا لـ Image من next/image في بداية الملف:

import Image from 'next/image';

ثم استبدل صورة البطل img بمكون Image:

// قبل
<img src="large-image.jpg" alt="Large Image" />
 
// بعد
<Image src="/large-image.jpg" alt="Large Image" width={3048} height={2024} />

هناك أيضًا صورة في التذييل (footer). لنقم باستبدالها أيضًا:

// قبل
<img src="/vercel.svg" alt="Vercel Logo" />
 
// بعد
<Image src="/vercel.svg" alt="Vercel Logo" width={72} height={16} />

أخيرًا، قم بتشغيل تقرير Lighthouse آخر في أدوات مطوري Chrome وقارن النتائج.

قراءة إضافية