فارسی

قدرت بهینه‌سازی تصویر در Next.js را برای وب‌سایت‌های برق‌آسا آزاد کنید. با بهینه‌سازی خودکار تصویر، پشتیبانی از فرمت‌ها و تکنیک‌های پیشرفته برای بهبود عملکرد و تجربه کاربری سایت خود آشنا شوید.

بهینه‌سازی تصویر در Next.js: به عملکرد وب‌سایت خود سرعت فوق‌العاده ببخشید

در چشم‌انداز دیجیتال امروز، سرعت و عملکرد وب‌سایت از اهمیت بالایی برخوردار است. کاربران انتظار دارند وب‌سایت‌ها به سرعت بارگذاری شوند و تجربه‌ای روان را ارائه دهند. تصاویر با بارگذاری کند، یکی از مقصران اصلی عملکرد ضعیف وب‌سایت هستند که منجر به نرخ پرش (bounce rates) بالاتر و تعامل کمتر می‌شوند. Next.js یک راه‌حل قدرتمند و داخلی برای این چالش ارائه می‌دهد: کامپوننت بهینه‌سازی شده Image.

این راهنمای جامع به دنیای بهینه‌سازی تصویر در Next.js می‌پردازد و دانش و ابزارهای لازم را برای بهبود چشمگیر عملکرد و تجربه کاربری وب‌سایت شما فراهم می‌کند. ما ویژگی‌های کلیدی کامپوننت Image را بررسی می‌کنیم، بهترین شیوه‌ها را مورد بحث قرار می‌دهیم و تکنیک‌های پیشرفته را برای به حداکثر رساندن تلاش‌های بهینه‌سازی تصویر شما به نمایش می‌گذاریم.

چرا بهینه‌سازی تصویر اهمیت دارد

قبل از اینکه به جزئیات بهینه‌سازی تصویر در Next.js بپردازیم، بیایید بفهمیم چرا این موضوع اینقدر حیاتی است:

معرفی کامپوننت Image در Next.js

کامپوننت Image در Next.js (next/image) جایگزین قدرتمندی برای تگ استاندارد <img> در HTML است. این کامپوننت مجموعه‌ای از ویژگی‌ها را ارائه می‌دهد که برای بهینه‌سازی خودکار تصاویر و بهبود عملکرد وب‌سایت طراحی شده‌اند. در اینجا به تفکیک مزایای کلیدی آن می‌پردازیم:

شروع کار با کامپوننت Image

برای استفاده از کامپوننت Image، ابتدا باید آن را از next/image وارد کنید:

import Image from 'next/image';

سپس، می‌توانید تگ‌های استاندارد <img> خود را با کامپوننت Image جایگزین کنید:

<Image
  src="/images/my-image.jpg"
  alt="تصویر من"
  width={500}
  height={300}
/>

مهم: به ویژگی‌های width و height توجه کنید. این ویژگی‌ها برای کامپوننت Image الزامی هستند تا از تغییر چیدمان جلوگیری شود. حتماً ابعاد صحیح تصویر خود را مشخص کنید.

مثال: نمایش عکس پروفایل

فرض کنید می‌خواهید یک عکس پروفایل را در وب‌سایت خود نمایش دهید:

import Image from 'next/image';

function Profile() {
  return (
    <div>
      <Image
        src="/images/profile.jpg"
        alt="عکس پروفایل من"
        width={150}
        height={150}
        style={{ borderRadius: '50%' }} // اختیاری: افزودن استایل برای عکس پروفایل دایره‌ای
      />
      <p>به پروفایل من خوش آمدید!</p>
    </div>
  );
}

export default Profile;

در این مثال، ما تصویر profile.jpg را با عرض و ارتفاع ۱۵۰ پیکسل نمایش می‌دهیم. همچنین مقداری استایل اختیاری برای ایجاد یک عکس پروفایل دایره‌ای اضافه کرده‌ایم.

درک استراتژی‌های بهینه‌سازی تصویر در Next.js

Next.js چندین استراتژی کلیدی را برای بهینه‌سازی خودکار تصاویر شما به کار می‌گیرد:

۱. تغییر اندازه و فشرده‌سازی

Next.js به طور خودکار تصاویر را برای کاهش حجم فایل بدون قربانی کردن کیفیت بصری، تغییر اندازه داده و فشرده می‌کند. سطح فشرده‌سازی را می‌توان با استفاده از پراپ quality پیکربندی کرد:

<Image
  src="/images/my-image.jpg"
  alt="تصویر من"
  width={500}
  height={300}
  quality={75} // کیفیت فشرده‌سازی را تنظیم کنید (۰-۱۰۰، پیش‌فرض ۷۵ است)
/>

با مقادیر مختلف quality آزمایش کنید تا تعادل بهینه بین حجم فایل و وفاداری بصری را پیدا کنید. مقدار ۷۵ به طور کلی نتایج خوبی ارائه می‌دهد.

۲. فرمت‌های تصویر مدرن (WebP و AVIF)

Next.js به طور خودکار تصاویر را در فرمت‌های مدرن مانند WebP و AVIF ارائه می‌دهد، اگر این فرمت‌ها توسط مرورگر کاربر پشتیبانی شوند. این فرمت‌ها فشرده‌سازی بسیار بهتری نسبت به فرمت‌های سنتی مانند JPEG و PNG ارائه می‌دهند که منجر به حجم فایل کمتر و زمان بارگذاری سریع‌تر می‌شود.

Next.js انتخاب فرمت را به طور خودکار مدیریت می‌کند و اطمینان می‌دهد که کاربران بر اساس قابلیت‌های مرورگر خود، فرمت تصویر بهینه را دریافت می‌کنند. این ویژگی نیازمند آن است که شما یک Image Optimization API را در فایل `next.config.js` خود پیکربندی کرده باشید. پیکربندی پیش‌فرض از API بهینه‌سازی تصویر Next.js استفاده می‌کند، اما شما می‌توانید آن را برای استفاده از یک ارائه‌دهنده شخص ثالث مانند Cloudinary یا Imgix پیکربندی کنید.

۳. بارگذاری تنبل (Lazy Loading)

بارگذاری تنبل تکنیکی است که بارگذاری تصاویر را تا زمانی که در شرف ورود به ویوپورت هستند به تعویق می‌اندازد. این کار زمان بارگذاری اولیه صفحه را کاهش می‌دهد و پهنای باند را حفظ می‌کند، به خصوص برای صفحاتی با تصاویر زیاد. کامپوننت Image در Next.js به طور پیش‌فرض بارگذاری تنبل را به صورت خودکار پیاده‌سازی می‌کند.

شما می‌توانید رفتار بارگذاری تنبل را با استفاده از پراپ loading سفارشی کنید:

<Image
  src="/images/my-image.jpg"
  alt="تصویر من"
  width={500}
  height={300}
  loading="lazy" // فعال کردن بارگذاری تنبل (پیش‌فرض)
  // loading="eager" // غیرفعال کردن بارگذاری تنبل (بارگذاری فوری تصویر)
/>

در حالی که بارگذاری تنبل به طور کلی توصیه می‌شود، ممکن است بخواهید آن را برای تصاویری که برای بارگذاری اولیه صفحه حیاتی هستند، مانند تصاویر هیرو یا لوگوها، غیرفعال کنید.

۴. تصاویر واکنش‌گرا با پراپ sizes

پراپ sizes به شما امکان می‌دهد تا اندازه‌های مختلف تصویر را برای اندازه‌های مختلف صفحه تعریف کنید. این کار تضمین می‌کند که کاربران اندازه تصویر بهینه را برای دستگاه خود دریافت می‌کنند، که باعث کاهش بیشتر مصرف پهنای باند و بهبود عملکرد می‌شود.

<Image
  src="/images/my-image.jpg"
  alt="تصویر من"
  width={1200} // عرض تصویر اصلی
  height={800}  // ارتفاع تصویر اصلی
  sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
/>

بیایید مقدار پراپ sizes را تجزیه کنیم:

پراپ sizes به مرورگر می‌گوید که کدام اندازه‌های تصویر را بر اساس اندازه صفحه دانلود کند. این کار تضمین می‌کند که کاربران اندازه تصویر بهینه را برای دستگاه خود دریافت می‌کنند، که باعث کاهش مصرف پهنای باند و بهبود عملکرد می‌شود. پراپ‌های width و height باید ابعاد اصلی تصویر را منعکس کنند.

پیکربندی API بهینه‌سازی تصویر در Next.js

Next.js از یک API بهینه‌سازی تصویر برای انجام وظایف بهینه‌سازی استفاده می‌کند. به طور پیش‌فرض، از API داخلی بهینه‌سازی تصویر Next.js استفاده می‌کند که برای بسیاری از پروژه‌ها مناسب است. با این حال، برای موارد استفاده پیشرفته‌تر، می‌توانید آن را برای استفاده از یک ارائه‌دهنده شخص ثالث مانند Cloudinary، Imgix یا Akamai پیکربندی کنید.

استفاده از API پیش‌فرض بهینه‌سازی تصویر Next.js

API پیش‌فرض بهینه‌سازی تصویر Next.js استفاده آسانی دارد و به هیچ پیکربندی نیاز ندارد. این API به طور خودکار تصاویر را در طول فرآیند بیلد بهینه کرده و آنها را از سرور Next.js ارائه می‌دهد.

پیکربندی یک ارائه‌دهنده بهینه‌سازی تصویر شخص ثالث

برای پیکربندی یک ارائه‌دهنده بهینه‌سازی تصویر شخص ثالث، باید فایل next.config.js خود را به‌روزرسانی کنید. در اینجا مثالی از نحوه پیکربندی Cloudinary آورده شده است:

/** @type {import('next').NextConfig} */
const nextConfig = {
  images: {
    domains: ['res.cloudinary.com'], // دامنه Cloudinary خود را اضافه کنید
  },
}

module.exports = nextConfig

این پیکربندی به Next.js می‌گوید که از Cloudinary برای بهینه‌سازی تصویر استفاده کند. شما همچنین باید از فرمت URL Cloudinary برای مشخص کردن تبدیلات تصویری که می‌خواهید اعمال کنید، استفاده کنید. همچنین باید SDK Cloudinary را نصب کنید:

npm install cloudinary

اکنون، تصاویر شما توسط Cloudinary بهینه و ارائه خواهند شد.

پیکربندی‌های مشابهی برای سایر ارائه‌دهندگان بهینه‌سازی تصویر مانند Imgix و Akamai موجود است. برای دستورالعمل‌های دقیق به مستندات مربوط به هر کدام مراجعه کنید.

تکنیک‌های پیشرفته بهینه‌سازی تصویر

فراتر از ویژگی‌های اساسی کامپوننت Image، می‌توانید چندین تکنیک پیشرفته را برای بهینه‌سازی بیشتر تصاویر خود به کار بگیرید:

۱. استفاده از شبکه تحویل محتوا (CDN)

CDN (شبکه تحویل محتوا) شبکه‌ای از سرورهای توزیع شده در سراسر جهان است که دارایی‌های استاتیک وب‌سایت شما، از جمله تصاویر را کش کرده و تحویل می‌دهد. استفاده از CDN می‌تواند با کاهش تأخیر و ارائه تصاویر از سروری نزدیک‌تر به کاربر، عملکرد وب‌سایت را به طور قابل توجهی بهبود بخشد.

ارائه‌دهندگان محبوب CDN عبارتند از:

بیشتر ارائه‌دهندگان CDN ادغام آسانی با Next.js ارائه می‌دهند. شما می‌توانید CDN خود را برای کش کردن و تحویل تصاویر خود پیکربندی کنید و تحویل آنها را بیش از پیش تسریع نمایید.

۲. بهینه‌سازی تصاویر SVG

تصاویر SVG (گرافیک برداری مقیاس‌پذیر) تصاویر مبتنی بر وکتور هستند که می‌توانند بدون از دست دادن کیفیت مقیاس‌بندی شوند. آنها اغلب برای لوگوها، آیکون‌ها و سایر گرافیک‌ها استفاده می‌شوند. در حالی که تصاویر SVG به طور کلی حجم کمی دارند، همچنان می‌توان آنها را برای افزایش بیشتر عملکرد بهینه کرد.

در اینجا چند نکته برای بهینه‌سازی تصاویر SVG آورده شده است:

۳. جایگزین‌های تصویر (افکت Blur-Up)

جایگزین‌های تصویر می‌توانند تجربه کاربری بهتری را در حین بارگذاری تصاویر فراهم کنند. یک تکنیک محبوب، افکت "blur-up" است، که در آن یک نسخه با وضوح پایین و تار از تصویر به عنوان جایگزین نمایش داده می‌شود و سپس با بارگذاری تصویر با وضوح کامل، به تدریج جایگزین آن می‌شود.

کامپوننت Image در Next.js با استفاده از پراپ placeholder و پراپ `blurDataURL`، با مقدار `blur` برای پراپ `placeholder`، پشتیبانی داخلی برای جایگزین‌های تصویر ارائه می‌دهد.

import Image from 'next/image';
import { useState, useEffect } from 'react';

function MyComponent() {
  const [imageSrc, setImageSrc] = useState(null);

  useEffect(() => {
    async function loadImage() {
      // شبیه‌سازی دریافت تصویر و blurDataURL آن از یک API
      const imageData = await fetchImageData('/images/my-image.jpg'); // با اندپوینت API خود جایگزین کنید
      setImageSrc(imageData);
    }

    loadImage();
  }, []);

  // تابع ساختگی برای شبیه‌سازی دریافت داده‌های تصویر (با فراخوانی واقعی API خود جایگزین کنید)
  async function fetchImageData(imagePath) {
    // در یک برنامه واقعی، شما داده‌های تصویر را از یک API دریافت می‌کنید.
    // برای این مثال، ما یک شیء ساختگی با یک blurDataURL برمی‌گردانیم.
    // شما می‌توانید blurDataURL را با استفاده از کتابخانه‌هایی مانند "plaiceholder" یا "blurhash" تولید کنید.
    return {
      src: imagePath,
      blurDataURL: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=', // با blurDataURL واقعی خود جایگزین کنید
    };
  }

  if (!imageSrc) {
    return <div>در حال بارگذاری...</div>;
  }

  return (
    <Image
      src={imageSrc.src}
      alt="تصویر من"
      width={500}
      height={300}
      placeholder="blur" // فعال کردن جایگزین تار
      blurDataURL={imageSrc.blurDataURL} // ارائه blurDataURL
    />
  );
}

export default MyComponent;

در این مثال، ما از پراپ placeholder="blur" برای فعال کردن افکت جایگزین تار استفاده می‌کنیم. ما همچنین پراپ blurDataURL را ارائه می‌دهیم که یک نمایش base64-encoded از تصویر تار است. شما می‌توانید blurDataURL را با استفاده از کتابخانه‌هایی مانند plaiceholder یا blurhash تولید کنید. پراپ‌های width و height باید ابعاد اصلی تصویر را منعکس کنند.

اندازه‌گیری و نظارت بر عملکرد بهینه‌سازی تصویر

اندازه‌گیری و نظارت بر عملکرد تلاش‌های بهینه‌سازی تصویر شما برای اطمینان از اینکه تأثیر مطلوب را دارند، ضروری است. در اینجا برخی از ابزارها و تکنیک‌هایی که می‌توانید استفاده کنید آورده شده است:

۱. Google PageSpeed Insights

Google PageSpeed Insights یک ابزار رایگان است که عملکرد وب‌سایت شما را تجزیه و تحلیل کرده و توصیه‌هایی برای بهبود ارائه می‌دهد. این ابزار بینش‌های ارزشمندی در مورد زمان بارگذاری وب‌سایت شما، از جمله معیارهای مربوط به تصویر، فراهم می‌کند. این ابزار فرصت‌های بهینه‌سازی مربوط به فرمت‌های مدرن تصویر، اندازه‌بندی تصویر و بارگذاری تنبل را برجسته می‌کند.

۲. WebPageTest

WebPageTest یک ابزار رایگان دیگر است که به شما امکان می‌دهد عملکرد وب‌سایت خود را از مکان‌ها و مرورگرهای مختلف آزمایش کنید. این ابزار معیارهای عملکرد دقیقی ارائه می‌دهد، از جمله نمودارهای آبشاری که ترتیب بارگذاری منابع وب‌سایت شما را نشان می‌دهند.

۳. Lighthouse

Lighthouse یک ابزار خودکار و منبع‌باز برای بهبود کیفیت صفحات وب است. شما می‌توانید آن را در Chrome DevTools یا به عنوان یک ابزار خط فرمان Node اجرا کنید. Lighthouse بازرسی‌هایی برای عملکرد، دسترسی، برنامه‌های وب پیشرو، سئو و موارد دیگر ارائه می‌دهد. همچنین توصیه‌های خاصی برای بهینه‌سازی تصویر ارائه می‌دهد.

۴. Core Web Vitals

Core Web Vitals مجموعه‌ای از معیارها هستند که تجربه کاربری وب‌سایت شما را اندازه‌گیری می‌کنند. آنها عبارتند از:

بهینه‌سازی تصویر می‌تواند به طور قابل توجهی بر LCP و CLS تأثیر بگذارد. با بهینه‌سازی تصاویر خود، می‌توانید امتیازات Core Web Vitals خود را بهبود بخشیده و تجربه کاربری بهتری ارائه دهید.

اشتباهات رایجی که باید از آنها اجتناب کرد

در حالی که بهینه‌سازی تصویر در Next.js قدرتمند است، مهم است که از برخی اشتباهات رایج آگاه باشید تا از آنها اجتناب کنید:

نمونه‌های واقعی از موفقیت بهینه‌سازی تصویر با Next.js

شرکت‌های متعددی با موفقیت بهینه‌سازی تصویر Next.js را برای بهبود عملکرد وب‌سایت خود پیاده‌سازی کرده‌اند. در اینجا چند نمونه آورده شده است:

این مثال‌ها تأثیر قابل توجهی را که بهینه‌سازی تصویر Next.js می‌تواند بر عملکرد وب‌سایت و تجربه کاربری داشته باشد، نشان می‌دهند.

نتیجه‌گیری

بهینه‌سازی تصویر در Next.js ابزاری قدرتمند است که می‌تواند عملکرد و تجربه کاربری وب‌سایت شما را به طور قابل توجهی بهبود بخشد. با بهره‌گیری از کامپوننت Image، درک استراتژی‌های بهینه‌سازی تصویر و اجتناب از اشتباهات رایج، می‌توانید وب‌سایت‌هایی برق‌آسا ایجاد کنید که کاربران را درگیر کرده و منجر به تبدیل (conversion) شوند.

به یاد داشته باشید که عملکرد بهینه‌سازی تصویر خود را با استفاده از ابزارهایی مانند Google PageSpeed Insights و WebPageTest اندازه‌گیری و نظارت کنید. با بهینه‌سازی مداوم تصاویر خود، می‌توانید اطمینان حاصل کنید که وب‌سایت شما بهترین تجربه ممکن را به کاربران خود ارائه می‌دهد.

قدرت بهینه‌سازی تصویر در Next.js را در آغوش بگیرید و پتانسیل کامل وب‌سایت خود را آزاد کنید!