Оптимизация шрифтов и изображений¶
В предыдущей главе вы узнали, как придать стиль своему приложению Next.js. Давайте продолжим работу над главной страницей, добавив настраиваемый шрифт и основное изображение.
Вот темы, которые мы рассмотрим:
- Как добавить пользовательские шрифты с помощью
next/font. - Как добавлять изображения с помощью
next/image. - Как оптимизируются шрифты и изображения в Next.js.
Зачем оптимизировать шрифты?¶
Шрифты играют важную роль в дизайне сайта, но использование пользовательских шрифтов в вашем проекте может повлиять на производительность, если файлы шрифтов должны быть получены и загружены.
Cumulative Layout Shift - это метрика, используемая Google для оценки производительности и удобства работы с сайтом. При использовании шрифтов смещение макета происходит, когда браузер сначала отображает текст резервным или системным шрифтом, а затем меняет его на пользовательский шрифт после загрузки. Такая замена может привести к изменению размера текста, расстояния между шрифтами или макета, смещая элементы вокруг него.
Next.js автоматически оптимизирует шрифты в приложении, когда вы используете модуль next/font. Он загружает файлы шрифтов во время сборки и размещает их вместе с другими статическими активами. Это означает, что когда пользователь посещает ваше приложение, не происходит дополнительных сетевых запросов к шрифтам, которые могли бы повлиять на производительность.
Как Next.js оптимизирует шрифты?
Добавление основного шрифта¶
Давайте добавим пользовательский шрифт Google в ваше приложение, чтобы посмотреть, как это работает.
В папке /app/ui создайте новый файл fonts.ts. Вы будете использовать этот файл для хранения шрифтов, которые будут использоваться во всем приложении.
Импортируйте шрифт Inter из модуля next/font/google - это будет ваш основной шрифт. Затем укажите, какое подмножество вы хотите загрузить. В данном случае 'latin':
| /app/layout.tsx | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Добавив Inter к элементу <body>, шрифт будет применяться во всем приложении. Здесь вы также добавляете класс Tailwind antialiased, который сглаживает шрифт. Использовать этот класс необязательно, но он добавляет приятный штрих.
Перейдите в браузер, откройте dev tools и выберите элемент body. Вы должны увидеть, что Inter и Inter_Fallback теперь применяются в стилях.
Практика: Добавление дополнительного шрифта¶
Вы также можете добавить шрифты к определенным элементам вашего приложения.
Теперь ваша очередь! В файле fonts.ts импортируйте вторичный шрифт Lusitana и передайте его элементу <p> в файле /app/page.tsx. В дополнение к указанию подмножества, как вы делали раньше, вы также должны указать различные веса шрифта. Например, 400 (нормальный) и 700 (жирный).
Когда все будет готово, разверните фрагмент кода ниже, чтобы увидеть решение.
Подсказки:
- Если вы не знаете, какие параметры веса передать шрифту, проверьте ошибки TypeScript в редакторе кода.
- Посетите сайт Google Fonts и найдите Lusitana, чтобы узнать, какие параметры доступны.
- Посмотрите документацию по добавлению нескольких шрифтов и полный список опций.
Раскрыть решение
| /app/ui/fonts.ts | |
|---|---|
1 2 3 4 5 6 7 8 | |
| /app/page.tsx | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
Наконец, компонент <AcmeLogo /> также использует Lusitana. Он был закомментирован для предотвращения ошибок, теперь его можно не комментировать:
| /app/page.tsx | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 | |
Отлично, вы добавили два пользовательских шрифта в свое приложение! Далее давайте добавим основное изображение на главную страницу.
Зачем оптимизировать изображения?¶
Next.js может обслуживать статические активы, такие как изображения, в папке верхнего уровня /public. На файлы внутри /public можно ссылаться в вашем приложении.
Используя обычный HTML, вы добавите изображение следующим образом:
1 2 3 4 | |
Однако это означает, что вам придется работать вручную:
- Убедиться, что изображение реагирует на разные размеры экрана.
- Задать размеры изображений для разных устройств.
- Предотвратить смещение макета при загрузке изображений.
- Ленивая загрузка изображений, которые находятся вне области просмотра пользователя.
Оптимизация изображений - это большая тема в веб-разработке, которую можно считать отдельной специализацией. Вместо того чтобы вручную выполнять эти оптимизации, вы можете использовать компонент next/image для автоматической оптимизации ваших изображений.
Компонент <Image>¶
Компонент <Image> является расширением тега HTML <img> и включает в себя автоматическую оптимизацию изображений, такую как:
- Предотвращение автоматического смещения макета при загрузке изображений.
- Изменение размера изображений, чтобы избежать отправки больших изображений на устройства с меньшей областью просмотра.
- Ленивая загрузка изображений по умолчанию (изображения загружаются по мере их попадания в область просмотра).
- Использование изображений в современных форматах, таких как WebP и AVIF, если браузер поддерживает их.
Добавление основного изображения рабочего стола¶
Давайте воспользуемся компонентом <Image>. Если вы заглянете в папку /public, то увидите, что там есть два изображения: hero-desktop.png и hero-mobile.png. Эти два изображения совершенно разные, и они будут показаны в зависимости от того, является ли устройство пользователя настольным или мобильным.
В файле /app/page.tsx импортируйте компонент из next/image. Затем добавьте изображение под комментарием:
| /app/page.tsx | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
Здесь вы устанавливаете width в 1000 и height в 760 пикселей. Хорошей практикой является установка width и height ваших изображений, чтобы избежать смещения макета, они должны иметь соотношение сторон идентичное исходному изображению. Эти значения не являются размером изображения, которое будет отрисовано, а представляют собой размер фактического файла изображения, используемого для определения соотношения сторон.
Вы также заметите класс hidden, чтобы убрать изображение из DOM на мобильных экранах, и md:block, чтобы показать его на настольных экранах.
Вот как теперь должна выглядеть ваша главная страница:
Практика: Добавление основного изображения для мобильных устройств¶
Теперь ваша очередь! Под основным изображением, которое вы только что добавили, добавьте еще один компонент <Image> для hero-mobile.png.
- Это изображение должно иметь
widthв560иheightв620пикселей. - Оно должно быть показано на мобильных экранах и скрыто на десктопе - вы можете использовать инструменты dev, чтобы проверить, правильно ли поменялись местами десктопные и мобильные изображения.
Когда все будет готово, разверните фрагмент кода ниже, чтобы увидеть решение.
Раскрыть решение
| /app/page.tsx | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | |
Отлично! Теперь на вашей главной странице есть пользовательский шрифт и основные изображения.
Правда или ложь - Изображения без размеров и веб-шрифты являются распространенными причинами смещения макета.
Рекомендуемая литература¶
Вы можете узнать еще много нового по этим темам, включая оптимизацию удаленных изображений и использование локальных файлов шрифтов. Если вы хотите глубже изучить шрифты и изображения, см:
- Image Optimization Docs
- Font Optimization Docs
- Improving Web Performance with Images (MDN)
- Web Fonts (MDN)
- Как основные показатели веб-страниц влияют на SEO
- Как Google обрабатывает JavaScript в процессе индексации
Источник — https://nextjs.org/learn/dashboard-app/optimizing-fonts-images

