Чек-лист для продакшена

Перед тем как вывести ваше Next.js приложение в продакшен, следует рассмотреть ряд оптимизаций и паттернов, которые помогут обеспечить наилучший пользовательский опыт, производительность и безопасность.

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

Автоматические оптимизации

Эти оптимизации Next.js включены по умолчанию и не требуют дополнительной настройки:

  • Серверные компоненты (Server Components): Next.js по умолчанию использует серверные компоненты. Они выполняются на сервере и не требуют JavaScript для рендеринга на клиенте, что не влияет на размер клиентских JavaScript-бандлов. Для интерактивности можно использовать клиентские компоненты (Client Components).
  • Разделение кода (Code-splitting): Серверные компоненты позволяют автоматически разделять код по сегментам маршрутов. Также можно использовать ленивую загрузку (lazy loading) клиентских компонентов и сторонних библиотек, где это уместно.
  • Предзагрузка (Prefetching): Когда ссылка на новый маршрут попадает в область видимости пользователя, Next.js предзагружает маршрут в фоновом режиме, что делает навигацию практически мгновенной. При необходимости можно отключить предзагрузку.
  • Статический рендеринг (Static Rendering): Next.js рендерит серверные и клиентские компоненты на сервере во время сборки и кэширует результат для повышения производительности. Для отдельных маршрутов можно использовать динамический рендеринг (Dynamic Rendering).
  • Кэширование (Caching): Next.js кэширует запросы данных, результаты рендеринга серверных и клиентских компонентов, статические ресурсы и другое, чтобы уменьшить количество запросов к серверу, базе данных и бэкенд-сервисам. При необходимости кэширование можно отключить.

Эти настройки по умолчанию направлены на повышение производительности приложения и уменьшение объема передаваемых данных при каждом сетевом запросе.

Во время разработки

При разработке приложения рекомендуется использовать следующие функции для обеспечения наилучшей производительности и пользовательского опыта:

Маршрутизация и рендеринг

Полезно знать: Частичный предварительный рендеринг (Partial Prerendering) (Экспериментально) позволит частям маршрута быть динамическими без перевода всего маршрута в динамический рендеринг.

Загрузка данных и кэширование

UI и доступность

  • Модуль шрифтов (Font Module): Оптимизируйте шрифты с помощью модуля шрифтов, который автоматически размещает ваши файлы шрифтов вместе с другими статическими ресурсами, удаляет внешние сетевые запросы и уменьшает сдвиг макета (layout shift).
  • Компонент <Image>: Оптимизируйте изображения с помощью компонента Image, который автоматически оптимизирует изображения, предотвращает сдвиг макета и обслуживает их в современных форматах, таких как WebP или AVIF.
  • Компонент <Script>: Оптимизируйте сторонние скрипты с помощью компонента Script, который автоматически откладывает скрипты и предотвращает их блокировку основного потока.
  • ESLint: Используйте встроенный плагин eslint-plugin-jsx-a11y для раннего выявления проблем с доступностью.

Безопасность

Метаданные и SEO

  • API метаданных (Metadata API): Используйте API метаданных для улучшения поисковой оптимизации (SEO) вашего приложения, добавляя заголовки страниц, описания и другое.
  • Open Graph (OG) изображения: Создавайте OG изображения для подготовки вашего приложения к публикации в соцсетях.
  • Карты сайта (Sitemaps) и Robots: Помогите поисковым системам сканировать и индексировать ваши страницы, генерируя карты сайта и файлы robots.

Типобезопасность

  • TypeScript и TS плагин: Используйте TypeScript и плагин TypeScript для улучшения типобезопасности и раннего выявления ошибок.

Перед выводом в продакшен

Перед выводом в продакшен можно выполнить next build для локальной сборки приложения и выявления ошибок сборки, а затем запустить next start для измерения производительности приложения в среде, приближенной к продакшену.

Core Web Vitals

  • Lighthouse: Запустите Lighthouse в режиме инкогнито, чтобы лучше понять, как пользователи будут взаимодействовать с вашим сайтом, и выявить области для улучшения. Это симулированный тест, который следует дополнять полевыми данными (например, Core Web Vitals).

Анализ бандлов

Используйте плагин @next/bundle-analyzer для анализа размера ваших JavaScript-бандлов и выявления крупных модулей и зависимостей, которые могут влиять на производительность приложения.

Дополнительно следующие инструменты помогут вам понять влияние добавления новых зависимостей в ваше приложение:

После развертывания

В зависимости от места развертывания вашего приложения у вас могут быть доступны дополнительные инструменты и интеграции для мониторинга и улучшения производительности приложения.

Для развертываний на Vercel рекомендуем следующее:

  • Аналитика: Встроенная панель аналитики для понимания трафика вашего приложения, включая количество уникальных посетителей, просмотры страниц и другое.
  • Speed Insights: Реальные данные о производительности на основе данных посетителей, предлагающие практический взгляд на то, как ваш сайт работает в реальных условиях.
  • Логирование: Логи выполнения и активности для отладки проблем и мониторинга приложения в продакшене. Также см. страницу интеграций для списка сторонних инструментов и сервисов.

Полезно знать:

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

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