Найти в Дзене

Компонент Next.js <Image /> и оптимизация изображений

Оглавление

Привет всем! Сегодня мы рассмотрим Next.js. Это гибкий #фреймворк React (да-да, о котором мы говорили в своей прошлой публикации), который предоставляет вам конструкторские блоки для создания быстрых веб-приложений. У него есть куча интересных функций прямо из коробки. Вместо того, чтобы говорить обо всем этом, мы сосредоточимся на одной функции, которую мы находим очень интересной и которая значительно ускоряет работу вашего веб-приложения.

Для тех, кто хочет узнать больше, Next.js обладает обширной документацией. Вам обязательно следует проверить её для получения более подробной информации.

Нашей темой в Next.js будет компонент image и то, как мы должны внедрять изображения в наши веб-сайты и веб-приложения.

В Next.js компонент image является расширением элемента HTML <img>

Однако, прежде чем говорить о компоненте image, мы должны сначала поговорить о самих изображениях.

Что такое изображения

#Изображения являются одним из самых важных элементов веб-сайта. Мы добавляем их для того, чтобы:

  • дать пользователю лучший пользовательский опыт;
  • визуально привлеките внимание;
  • помочь пользователю лучше понять контент;
  • направить взгляд вашего посетителя;

Поэтому неправильное их использование может привести к резкому замедлению работы нашего веб-сайта. А в мире, где все происходит быстро, люди, вероятно, не стали бы ждать загрузки наших веб-сайтов в течение 10 секунд.

Оптимизация изображений

  • Используйте изображения правильного размера в соответствии с шириной устройства. Для рабочего стола вы можете использовать изображение 1920х1280. Но использование изображения того же размера для мобильного устройства с шириной устройства 375px приведет к ненужному замедлению работы вашего сайта.
  • Используйте правильный формат для ваших изображений. Предлагается использовать формат #Webp, поскольку его качество такое же, как при использовании формата jpg или png, но он менее тяжелый.

WebP - это современный формат изображений, который обеспечивает превосходное сжатие изображений в Интернете без потерь и с потерями. Он поддерживается большинством браузеров. Проверьте здесь.

  • Если вы используете много картинок на своем сайте, возможно, вам захочется добавить атрибут loading="lazy" к вашему элементу <img />. Таким образом, #браузер не будет отправлять никаких запросов на загрузку дополнительных ресурсов до тех пор, пока пользователи не попадут в поле зрения. Это повысит производительность и ускорит загрузку сайта, поскольку изображения запрашиваются тогда, когда они необходимы.

Всегда делайте это перед началом работы, чтобы избежать возможных ошибок.

  • Используйте явные атрибуты ширины и высоты для предотвращения кумулятивного сдвига макета (CLS). Мы оставим вам эту статью в блоге для более детального ознакомления.

Теперь представьте, что вам не нужно проходить через все эти шаги, чтобы убедиться, что ваше изображение хорошо оптимизировано. Именно здесь на помощь приходит компонент Next.js <Image />.

Next.js и компонент Image

В Next.js, вместо традиционного элемента img, использование встроенного компонента #Image дает вам столько возможностей прямо из коробки, включая те, о которых мы еще не говорили. Но наше внимание будет сосредоточено на тех, которые мы уже проверили выше.

Оптимизация размера изображения

Когда изображение используется в компоненте Image, его размер автоматически оптимизируется в соответствии с шириной устройства. Это означает, что размер изображения 1920x1280 будет уменьшен, если пользователь зайдет на ваш сайт с мобильного устройства.

-2

Next.js использует API для оптимизации изображений. При изменении размера экрана #размер изображения также изменяется в соответствии с определенными точками останова. Если вы не указали точки останова явно, значения по умолчанию будут такими:

module.exports = {
images: {
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
},
}

Оптимизация формата изображения

Мы уже говорили о том, что рекомендуется использовать формат Webp для изображений, когда мы используем их на наших сайтах. На самом деле, вы также можете проверить #Google Lighthouse из инспектора. Если формат изображения jpg или png, Lighthouse предложит вам использовать формат Webp для лучшей производительности.

Next.js справляется и с этим! Он меняет формат изображения на Webp, даже если это jpg или png и т.д. Вот код:

<div className={styles.imgWrapper}> <Image src="/pic.jpg" layout="fill" objectFit="cover" /> </div>

Вот вывод в браузере:

-3

Вот сравнение использования jpg и Webp с одним и тем же изображением:

-4

Ленивая загрузка

Помните, мы говорили о том, как важно использовать атрибут loading="lazy" для повышения производительности сайта? Это также автоматически выполняется компонентом Next.js Image. Изображения не будут отображаться до тех пор, пока они не попадут в начальную область просмотра.

Кумулятивный сдвиг макета (CLS)

Чтобы предотвратить CLS, изображения должны иметь явную ширину и высоту. Откройте Lighthouse и попробуйте сами. Он выдаст вам следующее предупреждение:

-5

Для локальных изображений, используемых в компоненте Image, Next.js автоматически предоставляет эти значения. Это устраняет проблему. Однако для изображений, которые мы используем на наших сайтах, необходимо предоставить явные значения ширины и высоты. Поскольку Next.js не имеет доступа к удаленным файлам в процессе сборки. И на самом деле, он выдает это предупреждение:

-6

Заключение

#Next.js пользуется большой популярностью не просто так. Существует множество других преимуществ создания веб-приложений с помощью этого фреймворка. Если вы являетесь разработчиком #React и хотите узнать больше, мы рекомендуем вам ознакомиться с их документацией. Она очень информативна и проста в изучении.

Мы на других платформах:

Telegram