> Использовал ли ты Next.js? (JavaScript, Next.js)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: elirox
Стек: JavaScript, Next.js
> Пример ответа
Короткий ответ
Да, я активно использовал Next.js в production на протяжении последних трёх лет. Работал с версиями 12, 13 и 14, включая App Router, Server Components, middleware, ISR и streaming. Основной фокус был на гибридных приложениях с комбинацией SSR, SSG и client-side рендеринга для оптимизации SEO и производительности.
Подробное объяснение
Next.js - это React-фреймворк, который решает ключевые проблемы SPA: SEO, initial load performance и routing. В production я применял его для:
- Server-Side Rendering (SSR) - для динамических страниц с частым обновлением данных (например, дашборды).
- Static Site Generation (SSG) - для контентных страниц (блоги, документация) с ревалидацией через ISR.
- Incremental Static Regeneration (ISR) - для баланса между свежестью данных и скоростью загрузки.
- App Router - для nested layouts, streaming и Server Components, что снизило количество client-side JavaScript.
Ключевые trade-offs: SSR увеличивает нагрузку на сервер, SSG требует продуманной стратегии ревалидации, а Server Components ограничивают использование хуков и event listeners.
На практике
В одном проекте мы мигрировали с CRA на Next.js для e-commerce платформы. Использовали:
- App Router с layout groups для разделения админки и публичной части.
- Middleware для A/B тестирования и редиректов на основе геолокации.
- Streaming через
loading.jsиSuspenseдля улучшения perceived performance. - Оптимизацию изображений через
next/imageс автоматическим WebP и lazy loading.
Проблемы, с которыми столкнулись: сложность отладки Server Components (отсутствие DevTools), неочевидное поведение use client границ, и необходимость тюнинга конфигурации webpack для legacy зависимостей.
Пример кода
JSX// app/products/[slug]/page.jsx - пример ISR с ревалидациейimport { notFound } from 'next/navigation'export async function generateStaticParams() {const products = await fetch('https://api.example.com/products').then(r => r.json())return products.map(product => ({ slug: product.slug }))}export default async function ProductPage({ params }) {const product = await fetch(`https://api.example.com/products/${params.slug}`, {next: { revalidate: 3600 } // ISR - ревалидация раз в час}).then(r => {if (!r.ok) notFound()return r.json()})return (<div><h1>{product.name}</h1><p>{product.description}</p></div>)}
Как отвечать на собеседовании
Начни с конкретных проектов и версий Next.js, которые использовал. Подчеркни понимание trade-offs между рендеринг-стратегиями. Упомяни реальные проблемы и их решения - это показывает глубину опыта. Избегай общих фраз вроде "Next.js - это круто". Лучше: "В проекте X мы выбрали ISR вместо SSR, потому что данные обновлялись раз в час, а трафик был неравномерным". Если спросят про App Router - покажи знание Server Components, streaming и параллельных маршрутов.
Что проверяет интервьюер
- Понимание разницы между SSR, SSG, ISR и когда что применять.
- Опыт работы с App Router и его отличия от Pages Router.
- Знание проблем и ограничений Next.js (например, Server Components vs client-side интерактивность).
- Умение оптимизировать производительность (image optimization, code splitting, bundle analysis).
- Навыки работы с middleware, API routes и edge runtime.
Типичные ошибки
- Путать SSR и SSG, не понимать механизм ревалидации ISR.
- Использовать
use clientна каждом шагу, убивая преимущества Server Components. - Игнорировать конфигурацию
next.config.js(например, не настраивать remotePatterns для изображений). - Не учитывать, что
getServerSidePropsв Pages Router блокирует рендеринг до завершения запроса. - Забывать про hydration mismatch при работе с localStorage или random значениями в серверном коде.
> Похожие задачи по frontend
Какие преимущества у Next.js
Что такое ISR (Incremental Static Regeneration) в Next.js и почему это гибрид
В каком порядке вызываются хуки в родительских и дочерних компонентах Angular
Что такое компоненты, модули, сервисы, интерцепторы и директивы в Angular?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью