Оптимизация Next.js приложения для продакшена

Перед выгрузкой 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 кэширует запросы данных, результаты рендеринга компонентов, статические ресурсы и другое, чтобы уменьшить количество сетевых запросов. При необходимости кэширование можно отключить.

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

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

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

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

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

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

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

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

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

Типизация

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

Перед выгрузкой в продакшен

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

Core Web Vitals

  • Lighthouse: Запускайте в режиме инкогнито для оценки пользовательского опыта.

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

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

Дополнительные инструменты: