diff --git a/apps/docs/content/ru/docs/01-app/01-getting-started/10-updating-data.mdx b/apps/docs/content/ru/docs/01-app/01-getting-started/10-updating-data.mdx index 52591a0b..00bfe9ed 100644 --- a/apps/docs/content/ru/docs/01-app/01-getting-started/10-updating-data.mdx +++ b/apps/docs/content/ru/docs/01-app/01-getting-started/10-updating-data.mdx @@ -1,33 +1,33 @@ --- -source-updated-at: 2025-06-01T01:32:20.000Z -translation-updated-at: 2025-06-02T19:58:22.008Z +source-updated-at: 2025-06-03T15:30:49.000Z +translation-updated-at: 2025-06-06T16:44:10.522Z title: Как обновлять данные nav_title: Обновление данных -description: Узнайте, как обновлять данные в вашем Next.js приложении. +description: Узнайте, как обновлять данные в вашем приложении Next.js. related: title: Справочник API - description: Узнайте больше о функциях, упомянутых на этой странице, из справочника API. + description: Узнайте больше о функциях, упомянутых на этой странице, из Справочника API. links: - app/api-reference/functions/revalidatePath - app/api-reference/functions/revalidateTag - app/api-reference/functions/redirect --- -Вы можете обновлять данные в Next.js с помощью [Серверных функций (Server Functions)](https://react.dev/reference/rsc/server-functions) React. На этой странице объясняется, как [создавать](#creating-server-functions) и [вызывать](#invoking-server-functions) серверные функции. +Вы можете обновлять данные в Next.js, используя [Серверные функции (Server Functions)](https://react.dev/reference/rsc/server-functions) React. На этой странице объясняется, как [создавать](#creating-server-functions) и [вызывать](#invoking-server-functions) серверные функции. ## Серверные функции -Серверная функция — это асинхронная функция, которая выполняется на сервере. Серверные функции по своей природе асинхронны, так как вызываются клиентом через сетевой запрос. Когда они вызываются как часть `action`, их также называют **Серверными действиями (Server Actions)**. +Серверная функция — это асинхронная функция, выполняемая на сервере. Серверные функции по своей природе асинхронны, так как вызываются клиентом через сетевой запрос. При вызове в рамках `action` они также называются **Серверными действиями (Server Actions)**. По соглашению, `action` — это асинхронная функция, передаваемая в `startTransition`. Серверные функции автоматически оборачиваются в `startTransition`, когда: -- Передаются в `
` через проп `action` -- Передаются в ` ) @@ -279,7 +279,7 @@ export function Button() { ```jsx filename="app/ui/button.js" switcher 'use client' -import { useActionState } from 'react' +import { useActionState, startTransition } from 'react' import { createPost } from '@/app/actions' import { LoadingSpinner } from '@/app/ui/loading-spinner' @@ -287,16 +287,16 @@ export function Button() { const [state, action, pending] = useActionState(createPost, false) return ( - ) } ``` -### Инвалидация кеша +### Ревалидация кэша -После обновления данных можно инвалидировать кеш Next.js и показать обновлённые данные, вызвав [`revalidatePath`](/docs/app/api-reference/functions/revalidatePath) или [`revalidateTag`](/docs/app/api-reference/functions/revalidateTag) внутри серверной функции: +После обновления данных можно ревалидировать кэш Next.js и показать обновлённые данные, вызвав [`revalidatePath`](/docs/app/api-reference/functions/revalidatePath) или [`revalidateTag`](/docs/app/api-reference/functions/revalidateTag) внутри серверной функции: ```ts filename="app/lib/actions.ts" switcher import { revalidatePath } from 'next/cache' diff --git a/apps/docs/content/ru/docs/01-app/01-getting-started/14-deploying.mdx b/apps/docs/content/ru/docs/01-app/01-getting-started/14-deploying.mdx index 17e04021..deeb486f 100644 --- a/apps/docs/content/ru/docs/01-app/01-getting-started/14-deploying.mdx +++ b/apps/docs/content/ru/docs/01-app/01-getting-started/14-deploying.mdx @@ -1,23 +1,23 @@ --- -source-updated-at: 2025-06-01T01:32:20.000Z -translation-updated-at: 2025-06-02T19:57:13.804Z -title: Развертывание Next.js приложения +source-updated-at: 2025-06-05T23:52:35.000Z +translation-updated-at: 2025-06-06T16:43:20.246Z +title: Как развернуть приложение Next.js nav_title: Развертывание -description: Узнайте, как развернуть ваше Next.js приложение. +description: Узнайте, как развернуть ваше приложение Next.js. --- Next.js можно развернуть как сервер Node.js, контейнер Docker, статический экспорт или адаптировать для работы на различных платформах. -| Вариант развертывания | Поддерживаемые функции | -| -------------------------------- | ---------------------- | -| [Сервер Node.js](#nodejs-server) | Все | -| [Контейнер Docker](#docker) | Все | -| [Статический экспорт](#static-export) | Ограниченные | -| [Адаптеры](#adapters) | Зависит от платформы | +| Вариант развертывания | Поддержка функций | +| ------------------------------- | ----------------- | +| [Сервер Node.js](#nodejs-server) | Полная | +| [Контейнер Docker](#docker) | Полная | +| [Статический экспорт](#static-export) | Ограниченная | +| [Адаптеры](#adapters) | Зависит от платформы | ## Сервер Node.js -Next.js можно развернуть на любом провайдере, поддерживающем Node.js. Убедитесь, что в вашем `package.json` есть скрипты `"build"` и `"start"`: +Next.js можно развернуть на любом провайдере, поддерживающем Node.js. Убедитесь, что ваш `package.json` содержит скрипты `"build"` и `"start"`: ```json filename="package.json" { @@ -43,7 +43,9 @@ Next.js можно развернуть на любом провайдере, п Next.js можно развернуть на любом провайдере, поддерживающем контейнеры [Docker](https://www.docker.com/). Это включает оркестраторы контейнеров, такие как Kubernetes, или облачные провайдеры, работающие с Docker. -Развертывания с Docker поддерживают все функции Next.js. Узнайте, как [настроить их](/docs/app/guides/self-hosting) для вашей инфраструктуры. +Развертывания в Docker поддерживают все функции Next.js. Узнайте, как [настроить их](/docs/app/guides/self-hosting) для вашей инфраструктуры. + +> **Примечание для разработки:** Хотя Docker отлично подходит для продакшен-развертываний, для разработки на Mac и Windows рекомендуется использовать локальное окружение (`npm run dev`) вместо Docker для лучшей производительности. [Подробнее об оптимизации локальной разработки](/docs/app/guides/local-development). ### Шаблоны @@ -57,7 +59,7 @@ Next.js можно развернуть на любом провайдере, п ## Статический экспорт -Next.js позволяет начать со статического сайта или [одностраничного приложения (SPA)](/docs/app/guides/single-page-applications), а затем при необходимости перейти к использованию функций, требующих сервера. +Next.js позволяет начать со статического сайта или [одностраничного приложения (SPA)](/docs/app/guides/single-page-applications), а затем при необходимости добавить функции, требующие сервера. Поскольку Next.js поддерживает [статический экспорт](/docs/app/guides/static-exports), его можно развернуть на любом веб-сервере, способном обслуживать статические файлы HTML/CSS/JS. Это включает такие инструменты, как AWS S3, Nginx или Apache. diff --git a/apps/docs/content/ru/docs/01-app/02-guides/local-development.mdx b/apps/docs/content/ru/docs/01-app/02-guides/local-development.mdx index b7d4f7ba..eb6fb2ee 100644 --- a/apps/docs/content/ru/docs/01-app/02-guides/local-development.mdx +++ b/apps/docs/content/ru/docs/01-app/02-guides/local-development.mdx @@ -1,18 +1,18 @@ --- -source-updated-at: 2025-05-19T22:31:51.000Z -translation-updated-at: 2025-06-02T20:01:14.480Z +source-updated-at: 2025-06-05T23:52:35.000Z +translation-updated-at: 2025-06-06T16:43:49.840Z title: Оптимизация локальной среды разработки nav_title: Среда разработки description: Узнайте, как оптимизировать локальную среду разработки с помощью Next.js. --- -Next.js разработан для обеспечения отличного опыта разработчика. По мере роста вашего приложения вы можете заметить замедление времени компиляции во время локальной разработки. Это руководство поможет вам выявить и исправить распространённые проблемы с производительностью при компиляции. +Next.js разработан для обеспечения отличного опыта разработчика. По мере роста вашего приложения вы можете заметить замедление времени компиляции во время локальной разработки. Это руководство поможет вам выявить и устранить распространённые проблемы с производительностью при компиляции. ## Локальная разработка vs. продакшен Процесс разработки с `next dev` отличается от `next build` и `next start`. -`next dev` компилирует маршруты вашего приложения по мере их открытия или перехода. Это позволяет запустить сервер разработки без ожидания компиляции всех маршрутов приложения, что работает быстрее и использует меньше памяти. Продакшен-сборка применяет другие оптимизации, такие как минификация файлов и создание хешей контента, которые не нужны для локальной разработки. +`next dev` компилирует маршруты вашего приложения по мере их открытия или перехода. Это позволяет запустить сервер разработки без ожидания компиляции всех маршрутов приложения, что работает быстрее и использует меньше памяти. Продакшен-сборка применяет другие оптимизации, такие как минификация файлов и создание хэшей контента, которые не нужны для локальной разработки. ## Улучшение производительности локальной разработки @@ -24,7 +24,7 @@ Next.js разработан для обеспечения отличного о ### 2. Обновите Next.js и включите Turbopack -Убедитесь, что вы используете последнюю версию Next.js. Каждая новая версия часто содержит улучшения производительности. +Убедитесь, что вы используете последнюю версию Next.js. Каждая новая версия часто включает улучшения производительности. Turbopack — это новый бандлер, интегрированный в Next.js, который может улучшить локальную производительность. @@ -61,13 +61,13 @@ import Icon2 from 'react-icons/md/Icon2' - `tb` (tabler-icons) - `cg` (cssgg) -Вместе они составят десятки тысяч модулей, которые компилятор должен обработать, даже если вы используете лишь один импорт из каждого. +Вместе они составят десятки тысяч модулей, которые компилятор должен обработать, даже если вы используете только один импорт из каждого. -### Бочкообразные файлы (Barrel files) +### Бочкообразные файлы (barrel files) "Бочкообразные файлы" — это файлы, которые реэкспортируют множество элементов из других файлов. Они могут замедлять сборку, так как компилятор должен их анализировать, чтобы найти побочные эффекты в области модуля при использовании импорта. -Старайтесь импортировать напрямую из конкретных файлов, когда это возможно. [Узнайте больше о бочкообразных файлах](https://vercel.com/blog/how-we-optimized-package-imports-in-next-js) и встроенных оптимизациях в Next.js. +По возможности старайтесь импортировать напрямую из конкретных файлов. [Узнайте больше о бочкообразных файлах](https://vercel.com/blog/how-we-optimized-package-imports-in-next-js) и встроенных оптимизациях в Next.js. ### Оптимизация импортов пакетов @@ -89,16 +89,16 @@ Turbopack автоматически анализирует импорты и о Распространённая ошибка — настройка массива `content` таким образом, что он включает `node_modules` или другие большие директории с файлами, которые не должны сканироваться. -Tailwind CSS версии 3.4.8 и новее предупредит вас о настройках, которые могут замедлить сборку. +Tailwind CSS версии 3.4.8 и новее будет предупреждать о настройках, которые могут замедлить сборку. 1. В `tailwind.config.js` укажите конкретные файлы для сканирования: ```jsx module.exports = { content: [ - './src/**/*.{js,ts,jsx,tsx}', // Хороший вариант + './src/**/*.{js,ts,jsx,tsx}', // Хорошо // Это может быть слишком широко - // Будет включать `packages/**/node_modules` тоже + // Будет включать `packages/**/node_modules` // '../../packages/**/*.{js,ts,jsx,tsx}', ], } @@ -119,7 +119,7 @@ Tailwind CSS версии 3.4.8 и новее предупредит вас о Если вы добавили пользовательские настройки webpack, они могут замедлять компиляцию. -Подумайте, действительно ли они нужны для локальной разработки. Вы можете включать определённые инструменты только для продакшен-сборок или перейти на Turbopack, используя [загрузчики](/docs/app/api-reference/config/next-config-js/turbopack#supported-loaders). +Подумайте, действительно ли они нужны для локальной разработки. Вы можете включать определённые инструменты только для продакшен-сборок или перейти на Turbopack, используя [лоадеры](/docs/app/api-reference/config/next-config-js/turbopack#supported-loaders). ### 6. Оптимизация использования памяти @@ -135,11 +135,25 @@ Tailwind CSS версии 3.4.8 и новее предупредит вас о [Узнайте больше об экспериментальной опции](/docs/app/api-reference/config/next-config-js/serverComponentsHmrCache). +### 8. Рассмотрите локальную разработку вместо Docker + +Если вы используете Docker для разработки на Mac или Windows, вы можете столкнуться с заметно более низкой производительностью по сравнению с локальным запуском Next.js. + +Доступ Docker к файловой системе на Mac и Windows может привести к тому, что Hot Module Replacement (HMR) будет занимать секунды или даже минуты, тогда как то же приложение работает с быстрым HMR при локальной разработке. + +Эта разница в производительности связана с тем, как Docker обрабатывает операции с файловой системой вне Linux-окружений. Для лучшего опыта разработки: + +- Используйте локальную разработку (`npm run dev` или `pnpm dev`) вместо Docker во время разработки +- Оставьте Docker для продакшен-развёртываний и тестирования продакшен-сборок +- Если вам необходимо использовать Docker для разработки, рассмотрите Docker на Linux-машине или VM + +[Узнайте больше о развёртывании с Docker](/docs/app/getting-started/deploying#docker) для продакшен-использования. + ## Инструменты для поиска проблем -### Подробное логирование запросов +### Подробное логирование запросов fetch -Используйте опцию `logging.fetches` в файле `next.config.js`, чтобы видеть подробную информацию о происходящем во время разработки: +Используйте опцию `logging.fetches` в файле `next.config.js`, чтобы видеть более подробную информацию о происходящем во время разработки: ```js module.exports = { @@ -151,12 +165,12 @@ module.exports = { } ``` -[Узнайте больше о логировании запросов](/docs/app/api-reference/config/next-config-js/logging). +[Узнайте больше о логировании запросов fetch](/docs/app/api-reference/config/next-config-js/logging). ## Трассировка Turbopack Трассировка Turbopack — это инструмент, который помогает понять производительность вашего приложения во время локальной разработки. -Он предоставляет подробную информацию о времени компиляции каждого модуля и их взаимосвязях. +Он предоставляет подробную информацию о времени, затраченном на компиляцию каждого модуля, и их взаимосвязях. 1. Убедитесь, что у вас установлена последняя версия Next.js. 1. Сгенерируйте файл трассировки Turbopack: @@ -167,7 +181,7 @@ module.exports = { 1. Перемещайтесь по приложению или редактируйте файлы, чтобы воспроизвести проблему. 1. Остановите сервер разработки Next.js. -1. В папке `.next` появится файл `trace-turbopack`. +1. В папке `.next` будет доступен файл `trace-turbopack`. 1. Вы можете интерпретировать файл с помощью `next internal trace [путь-к-файлу]`: ```bash @@ -180,8 +194,8 @@ module.exports = { next internal turbo-trace-server .next/trace-turbopack ``` -1. После запуска сервера трассировки вы можете просмотреть её по адресу https://trace.nextjs.org/. -1. По умолчанию просмотрщик агрегирует временные показатели. Чтобы увидеть каждое отдельное время, переключитесь с "Aggregated in order" на "Spans in order" в правом верхнем углу просмотрщика. +1. После запуска сервера трассировки вы можете просмотреть её на https://trace.nextjs.org/. +1. По умолчанию просмотрщик трассировки агрегирует временные показатели. Чтобы увидеть каждое отдельное время, вы можете переключиться с "Aggregated in order" на "Spans in order" в правом верхнем углу просмотрщика. ## Всё ещё есть проблемы? diff --git a/apps/docs/content/ru/docs/01-app/02-guides/memory-usage.mdx b/apps/docs/content/ru/docs/01-app/02-guides/memory-usage.mdx index b8eb76f6..59ed66f3 100644 --- a/apps/docs/content/ru/docs/01-app/02-guides/memory-usage.mdx +++ b/apps/docs/content/ru/docs/01-app/02-guides/memory-usage.mdx @@ -1,30 +1,30 @@ --- -source-updated-at: 2025-05-16T04:52:11.000Z -translation-updated-at: 2025-06-02T20:00:40.190Z +source-updated-at: 2025-06-05T15:29:30.000Z +translation-updated-at: 2025-06-06T16:43:25.076Z title: Оптимизация использования памяти nav_title: Использование памяти -description: Оптимизация использования памяти вашим приложением в режиме разработки и продакшена. +description: Оптимизация потребления памяти вашим приложением в режиме разработки и продакшена. --- По мере роста приложений и добавления новых функций, они могут требовать больше ресурсов при локальной разработке или создании продакшен-сборок. -Рассмотрим некоторые стратегии и техники для оптимизации памяти и решения распространённых проблем с памятью в Next.js. +Рассмотрим стратегии и техники оптимизации памяти, а также способы решения распространённых проблем с памятью в Next.js. ## Уменьшение количества зависимостей Приложения с большим количеством зависимостей потребляют больше памяти. -[Анализатор сборки (Bundle Analyzer)](/docs/app/guides/package-bundling) поможет исследовать крупные зависимости в вашем приложении, которые можно удалить для улучшения производительности и использования памяти. +[Анализатор бандлов (Bundle Analyzer)](/docs/app/guides/package-bundling) поможет выявить крупные зависимости в вашем приложении, которые можно удалить для улучшения производительности и снижения потребления памяти. ## Использование `experimental.webpackMemoryOptimizations` -Начиная с версии `v15.0.0`, вы можете добавить `experimental.webpackMemoryOptimizations: true` в файл `next.config.js`, чтобы изменить поведение Webpack для уменьшения максимального использования памяти, что может незначительно увеличить время компиляции. +Начиная с версии `v15.0.0`, вы можете добавить `experimental.webpackMemoryOptimizations: true` в файл `next.config.js`, чтобы изменить поведение Webpack, уменьшающее максимальное потребление памяти, но потенциально незначительно увеличивающее время компиляции. -> **Важно знать**: В настоящее время эта функция является экспериментальной для тестирования на большем количестве проектов, но считается низкорисковой. +> **Важно знать**: В настоящее время эта функция находится в экспериментальном статусе для тестирования на большем количестве проектов, но считается низкорисковой. ## Запуск `next build` с `--experimental-debug-memory-usage` -Начиная с версии `14.2.0`, вы можете запустить `next build --experimental-debug-memory-usage` для выполнения сборки в режиме, где Next.js будет непрерывно выводить информацию об использовании памяти в процессе сборки, такую как использование кучи и статистику сборки мусора. Снимки кучи также будут автоматически создаваться при приближении использования памяти к установленному лимиту. +Начиная с версии `14.2.0`, вы можете запустить `next build --experimental-debug-memory-usage` для выполнения сборки в режиме, где Next.js будет непрерывно выводить информацию о потреблении памяти в процессе сборки, такую как использование кучи и статистику сборки мусора. Снимки кучи (heap snapshots) также будут автоматически создаваться при приближении к установленному лимиту памяти. > **Важно знать**: Эта функция несовместима с опцией Webpack build worker, которая автоматически включается, если у вас нет пользовательской конфигурации Webpack. @@ -38,39 +38,38 @@ description: Оптимизация использования памяти ва node --heap-prof node_modules/next/dist/bin/next build ``` -По завершении сборки Node.js создаст файл `.heapprofile`. +После завершения сборки Node.js создаст файл `.heapprofile`. -В Chrome DevTools вы можете открыть вкладку "Memory" и нажать кнопку "Load Profile" для визуализации файла. +В Chrome DevTools откройте вкладку "Memory" и нажмите кнопку "Load Profile" для визуализации файла. ## Анализ снимка кучи -Вы можете использовать инструмент инспектора для анализа использования памяти приложением. +Вы можете использовать инструмент инспектора для анализа потребления памяти приложением. -При запуске команды `next build` или `next dev` добавьте `NODE_OPTIONS=--inspect` в начало команды. Это откроет агент инспектора на стандартном порту. -Если вы хотите остановить выполнение до запуска пользовательского кода, можно передать `--inspect-brk`. Во время работы процесса вы можете использовать инструмент, например Chrome DevTools, для подключения к порту отладки, записи и анализа снимка кучи, чтобы увидеть, какая память удерживается. +При запуске команд `next build` или `next dev` добавьте `NODE_OPTIONS=--inspect` в начало команды. Это откроет агент инспектора на стандартном порту. +Если вы хотите остановить выполнение до запуска пользовательского кода, используйте `--inspect-brk`. Во время работы процесса вы можете подключиться к порту отладки через инструменты вроде Chrome DevTools, чтобы записать и проанализировать снимок кучи для определения удерживаемой памяти. Начиная с версии `14.2.0`, вы также можете запустить `next build` с флагом `--experimental-debug-memory-usage` для упрощения создания снимков кучи. -При работе в этом режиме вы можете отправить сигнал `SIGUSR2` процессу в любой момент, и процесс создаст снимок кучи. +В этом режиме вы можете отправить сигнал `SIGUSR2` процессу в любой момент, и процесс создаст снимок кучи. -Снимок кучи будет сохранён в корне проекта Next.js и может быть загружен в любой анализатор кучи, например Chrome DevTools, для просмотра удерживаемой памяти. Этот режим пока несовместим с Webpack build workers. +Снимок кучи сохранится в корне проекта Next.js и может быть загружен в любой анализатор кучи, например Chrome DevTools, для просмотра удерживаемой памяти. Этот режим пока несовместим с Webpack build workers. Подробнее см. [как записывать и анализировать снимки кучи](https://developer.chrome.com/docs/devtools/memory-problems/heap-snapshots). ## Webpack build worker -Webpack build worker позволяет запускать компиляции Webpack в отдельном Node.js worker, что уменьшает использование памяти вашим приложением во время сборок. +Webpack build worker позволяет запускать компиляции Webpack в отдельном Node.js воркере, что уменьшает потребление памяти приложением во время сборок. -Эта опция включена по умолчанию, начиная с версии `v14.1.0`, если ваше приложение не имеет пользовательской конфигурации Webpack. +Эта опция включена по умолчанию, начиная с версии `v14.1.0`, если в приложении нет пользовательской конфигурации Webpack. -Если вы используете более старую версию Next.js или у вас есть пользовательская конфигурация Webpack, вы можете включить эту опцию, установив `experimental.webpackBuildWorker: true` в вашем `next.config.js`. +Если вы используете более старую версию Next.js или имеете пользовательскую конфигурацию Webpack, вы можете включить эту опцию, установив `experimental.webpackBuildWorker: true` в файле `next.config.js`. -> **Важно знать**: Эта функция может быть несовместима со всеми пользовательскими Webpack-плагинами. +> **Важно знать**: Эта функция может быть несовместима со всеми пользовательскими плагинами Webpack. ## Отключение кэша Webpack -[Кэш Webpack](https://webpack.js.org/configuration/cache/) сохраняет сгенерированные Webpack-модули в памяти и/или на диске для ускорения сборок. Это может -улучшить производительность, но также увеличит использование памяти вашим приложением для хранения кэшированных данных. +[Кэш Webpack](https://webpack.js.org/configuration/cache/) сохраняет сгенерированные модули Webpack в памяти и/или на диске для ускорения сборок. Это может улучшить производительность, но также увеличит потребление памяти приложением для хранения кэшированных данных. Вы можете отключить это поведение, добавив [пользовательскую конфигурацию Webpack](/docs/app/api-reference/config/next-config-js/webpack) в ваше приложение: @@ -96,22 +95,22 @@ export default nextConfig ## Отключение статического анализа -Проверка типов и линтинг могут требовать много памяти, особенно в крупных проектах. +Проверка типов и линтинг могут потреблять много памяти, особенно в крупных проектах. Однако большинство проектов имеют выделенный CI-раннер, который уже выполняет эти задачи. -Если сборка вызывает проблемы с нехваткой памяти на этапе "Linting and checking validity of types", вы можете отключить эти задачи во время сборок: +Если сборка вызывает ошибки нехватки памяти на этапе "Linting and checking validity of types", вы можете отключить эти задачи во время сборки: ```js filename="next.config.mjs" /** @type {import('next').NextConfig} */ const nextConfig = { eslint: { // Предупреждение: Это позволяет успешно завершать продакшен-сборки, - // даже если в вашем проекте есть ошибки ESLint. + // даже если в проекте есть ошибки ESLint. ignoreDuringBuilds: true, }, typescript: { // !! ВНИМАНИЕ !! // Опасная опция: позволяет успешно завершать продакшен-сборки, - // даже если в вашем проекте есть ошибки типов. + // даже если в проекте есть ошибки типов. // !! ВНИМАНИЕ !! ignoreBuildErrors: true, }, @@ -123,18 +122,51 @@ export default nextConfig - [Игнорирование ошибок TypeScript](/docs/app/api-reference/config/typescript#disabling-typescript-errors-in-production) - [ESLint в конфигурации Next.js](/docs/pages/api-reference/config/next-config-js/eslint) -Учтите, что это может привести к ошибочным деплоям из-за ошибок типов или линтинга. -Мы настоятельно рекомендуем продвигать сборки в продакшен только после завершения статического анализа. -Если вы деплоите на Vercel, ознакомьтесь с [руководством по промежуточным деплоям](https://vercel.com/docs/deployments/managing-deployments#staging-and-promoting-a-production-deployment), чтобы узнать, как продвигать сборки в продакшен после успешного выполнения пользовательских задач. +Учтите, что это может привести к деплою с ошибками типов или линтинга. +Мы настоятельно рекомендуем продвигать в продакшен только те сборки, где статический анализ завершён успешно. +При деплое на Vercel вы можете ознакомиться с [руководством по стейджинг-деплоям](https://vercel.com/docs/deployments/managing-deployments#staging-and-promoting-a-production-deployment), чтобы узнать, как продвигать сборки в продакшен после успешного выполнения пользовательских задач. ## Отключение source maps -Генерация source maps потребляет дополнительную память во время процесса сборки. +Генерация source maps потребляет дополнительную память во время сборки. Вы можете отключить генерацию source maps, добавив `productionBrowserSourceMaps: false` и `experimental.serverSourceMaps: false` в конфигурацию Next.js. > **Важно знать**: Некоторые плагины могут включать source maps и могут требовать пользовательской конфигурации для отключения. -## Проблемы с памятью в Edge +## Проблемы с памятью в Edge runtime -В Next.js `v14.1.3` исправлена проблема с памятью при использовании Edge runtime. Пожалуйста, обновитесь до этой версии (или новее), чтобы проверить, решает ли она вашу проблему. \ No newline at end of file +В версии Next.js `v14.1.3` была исправлена проблема с памятью при использовании Edge runtime. Обновитесь до этой версии (или новее), чтобы проверить, решает ли она вашу проблему. + +## Предзагрузка записей + +При запуске сервера Next.js предзагружает JavaScript-модули каждой страницы в память, а не во время запроса. + +Эта оптимизация обеспечивает более быстрые отклики в обмен на большее начальное потребление памяти. + +Для отключения этой оптимизации установите флаг `experimental.preloadEntriesOnStart` в `false`. + +```ts filename="next.config.ts" switcher +import type { NextConfig } from 'next' + +const config: NextConfig = { + experimental: { + preloadEntriesOnStart: false, + }, +} + +export default config +``` + +```js filename="next.config.mjs" switcher +/** @type {import('next').NextConfig} */ +const config = { + experimental: { + preloadEntriesOnStart: false, + }, +} + +export default config +``` + +Next.js не выгружает эти JavaScript-модули, поэтому даже с отключённой оптимизацией потребление памяти сервером Next.js в конечном итоге будет таким же, если все страницы будут запрошены. \ No newline at end of file diff --git a/apps/docs/content/ru/docs/01-app/05-api-reference/04-functions/generate-metadata.mdx b/apps/docs/content/ru/docs/01-app/05-api-reference/04-functions/generate-metadata.mdx index 5c95a2f5..5e93ecf2 100644 --- a/apps/docs/content/ru/docs/01-app/05-api-reference/04-functions/generate-metadata.mdx +++ b/apps/docs/content/ru/docs/01-app/05-api-reference/04-functions/generate-metadata.mdx @@ -1,11 +1,11 @@ --- -source-updated-at: 2025-06-01T01:32:20.000Z -translation-updated-at: 2025-06-02T20:14:06.456Z +source-updated-at: 2025-06-05T15:29:30.000Z +translation-updated-at: 2025-06-06T16:50:11.119Z title: generateMetadata -description: Узнайте, как добавить метаданные в ваше Next.js-приложение для улучшения поисковой оптимизации (SEO) и возможности расшаривания в интернете. +description: Узнайте, как добавить метаданные в ваше Next.js приложение для улучшения поисковой оптимизации (SEO) и возможности делиться в интернете. related: title: Дальнейшие шаги - description: Просмотрите все доступные опции API Metadata. + description: Просмотрите все доступные опции Metadata API. links: - app/api-reference/file-conventions/metadata - app/api-reference/functions/generate-viewport @@ -37,11 +37,11 @@ export const metadata = { export default function Page() {} ``` -> Полный список поддерживаемых опций смотрите в разделе [Поля Metadata](#metadata-fields). +> Полный список поддерживаемых опций смотрите в разделе [Поля метаданных](#metadata-fields). ## Функция `generateMetadata` -Динамические метаданные, зависящие от **динамической информации**, такие как текущие параметры маршрута, внешние данные или `metadata` в родительских сегментах, могут быть заданы с помощью экспорта функции `generateMetadata`, которая возвращает объект [`Metadata`](#metadata-fields). +Динамические метаданные, зависящие от **динамической информации**, такие как текущие параметры маршрута, внешние данные или метаданные в родительских сегментах, могут быть заданы с помощью экспорта функции `generateMetadata`, которая возвращает объект [`Metadata`](#metadata-fields). ```tsx filename="app/products/[id]/page.tsx" switcher import type { Metadata, ResolvingMetadata } from 'next' @@ -101,10 +101,11 @@ export default function Page({ params, searchParams }) {} > > - Метаданные можно добавлять в файлы `layout.js` и `page.js`. > - Next.js автоматически обработает метаданные и создаст соответствующие теги `` для страницы. -> - Экспорт объекта `metadata` и функции `generateMetadata` **поддерживается только в Server Components**. +> - Экспорт объекта `metadata` и функции `generateMetadata` поддерживается **только в Server Components**. > - Нельзя экспортировать одновременно объект `metadata` и функцию `generateMetadata` из одного сегмента маршрута. -> - Запросы `fetch` внутри `generateMetadata` автоматически [мемоизируются](/docs/app/deep-dive/caching#request-memoization) для одних и тех же данных в `generateMetadata`, `generateStaticParams`, Layouts, Pages и Server Components. -> - Если `fetch` недоступен, можно использовать React [`cache`](/docs/app/deep-dive/caching#react-cache-function). -[ Файловые метаданные](/docs/app/api-reference/file-conventions/metadata) имеют более высокий приоритет и переопределяют объект `metadata` и функцию `generateMetadata`. +> - Запросы `fetch` внутри `generateMetadata` автоматически [мемоизируются](/docs/app/deep-dive/caching#request-memoization) для одинаковых данных между `generateMetadata`, `generateStaticParams`, Layouts, Pages и Server Components. +> - React [`cache` можно использовать](/docs/app/deep-dive/caching#react-cache-function), если `fetch` недоступен. +> - [Файловые метаданные](/docs/app/api-reference/file-conventions/metadata) имеют более высокий приоритет и переопределяют объект `metadata` и функцию `generateMetadata`. ## Справочник @@ -134,22 +135,22 @@ export default function Page({ params, searchParams }) {} ### Возвращаемое значение -Функция `generateMetadata` должна возвращать объект [`Metadata`](#metadata-fields), содержащий одно или несколько полей метаданных. +`generateMetadata` должна возвращать объект [`Metadata`](#metadata-fields), содержащий одно или несколько полей метаданных. > **Полезно знать**: > -> - Если метаданные не зависят от информации во время выполнения, их следует определять с помощью статического объекта [`metadata`](#the-metadata-object), а не функции `generateMetadata`. -> - Запросы `fetch` автоматически [мемоизируются](/docs/app/deep-dive/caching#request-memoization) для одних и тех же данных в `generateMetadata`, `generateStaticParams`, Layouts, Pages и Server Components. Если `fetch` недоступен, можно использовать React [`cache`](/docs/app/deep-dive/caching#react-cache-function). +> - Если метаданные не зависят от информации во время выполнения, их следует определять с помощью статического объекта [`metadata`](#the-metadata-object), а не `generateMetadata`. +> - Запросы `fetch` автоматически [мемоизируются](/docs/app/deep-dive/caching#request-memoization) для одинаковых данных между `generateMetadata`, `generateStaticParams`, Layouts, Pages и Server Components. React [`cache` можно использовать](/docs/app/deep-dive/caching#react-cache-function), если `fetch` недоступен. > - `searchParams` доступны только в сегментах `page.js`. -> - Внутри `generateMetadata` также можно использовать методы Next.js [`redirect()`](/docs/app/api-reference/functions/redirect) и [`notFound()`](/docs/app/api-reference/functions/not-found). +> - Методы Next.js [`redirect()`](/docs/app/api-reference/functions/redirect) и [`notFound()`](/docs/app/api-reference/functions/not-found) также можно использовать внутри `generateMetadata`. -### Поля Metadata +### Поля метаданных Поддерживаются следующие поля: #### `title` -Атрибут `title` используется для задания заголовка документа. Его можно определить как простую [строку](#string) или необязательный [шаблонный объект](#template). +Атрибут `title` используется для установки заголовка документа. Может быть определён как простая [строка](#string) или необязательный [шаблонный объект](#template). ##### Строка @@ -165,7 +166,7 @@ export const metadata = { ##### `default` -`title.default` можно использовать для задания **резервного заголовка** для дочерних сегментов маршрута, которые не определяют `title`. +`title.default` можно использовать для предоставления **резервного заголовка** дочерним сегментам маршрута, которые не определяют `title`. ```tsx filename="app/layout.tsx" import type { Metadata } from 'next' @@ -187,7 +188,7 @@ export const metadata: Metadata = {} ##### `template` -`title.template` можно использовать для добавления префикса или суффикса к `title`, определённым в **дочерних** сегментах маршрута. +`title.template` можно использовать для добавления префикса или суффикса к `titles`, определённым в **дочерних** сегментах маршрута. ```tsx filename="app/layout.tsx" switcher import type { Metadata } from 'next' @@ -195,7 +196,7 @@ import type { Metadata } from 'next' export const metadata: Metadata = { title: { template: '%s | Acme', - default: 'Acme', // при создании шаблона требуется default + default: 'Acme', // требуется по умолчанию при создании шаблона }, } ``` @@ -204,7 +205,7 @@ export const metadata: Metadata = { export const metadata = { title: { template: '%s | Acme', - default: 'Acme', // при создании шаблона требуется default + default: 'Acme', // требуется по умолчанию при создании шаблона }, } ``` @@ -239,7 +240,7 @@ export const metadata = { ##### `absolute` -`title.absolute` можно использовать для задания заголовка, который **игнорирует** `title.template`, установленный в родительских сегментах. +`title.absolute` можно использовать для предоставления заголовка, который **игнорирует** `title.template`, установленный в родительских сегментах. ```tsx filename="app/layout.tsx" switcher import type { Metadata } from 'next' @@ -290,7 +291,7 @@ export const metadata = { > - `title.template` определяет новый шаблон заголовка для дочерних сегментов. > > - `page.js` -> - Если страница не определяет свой собственный заголовок, будет использоваться заголовок из ближайшего родительского сегмента. +> - Если страница не определяет свой собственный заголовок, будет использоваться заголовок ближайшего родителя. > - `title` (строка) определяет заголовок маршрута. Он будет дополнять `title.template` из ближайшего родительского сегмента, если он существует. > - `title.absolute` определяет заголовок маршрута. Он игнорирует `title.template` из родительских сегментов. > - `title.template` не имеет эффекта в `page.js`, потому что страница всегда является конечным сегментом маршрута. @@ -342,9 +343,9 @@ export const metadata = { #### `metadataBase` -`metadataBase` — это удобная опция для задания базового URL-префикса для полей `metadata`, которые требуют полного URL. +`metadataBase` - это удобная опция для установки базового префикса URL для полей `metadata`, которые требуют полного URL. -- `metadataBase` позволяет полям `metadata`, основанным на URL, определённым в **текущем сегменте маршрута и ниже**, использовать **относительный путь** вместо обязательного абсолютного URL. +- `metadataBase` позволяет URL-полям `metadata`, определённым в **текущем сегменте маршрута и ниже**, использовать **относительный путь** вместо обязательного абсолютного URL. - Относительный путь поля будет объединён с `metadataBase` для формирования полного URL. ```jsx filename="layout.js | page.js" @@ -372,11 +373,11 @@ export const metadata = { > **Полезно знать**: > -> - `metadataBase` обычно задаётся в корневом `app/layout.js`, чтобы применяться к полям `metadata`, основанным на URL, во всех маршрутах. -> - Все поля `metadata`, основанные на URL, которые требуют абсолютных URL, могут быть настроены с помощью опции `metadataBase`. +> - `metadataBase` обычно устанавливается в корневом `app/layout.js`, чтобы применяться к URL-полям `metadata` во всех маршрутах. +> - Все URL-поля `metadata`, требующие абсолютных URL, могут быть настроены с помощью опции `metadataBase`. > - `metadataBase` может содержать поддомен, например `https://app.acme.com`, или базовый путь, например `https://acme.com/start/from/here`. > - Если поле `metadata` предоставляет абсолютный URL, `metadataBase` будет проигнорирован. -> - Использование относительного пути в поле `metadata`, основанном на URL, без настройки `metadataBase` вызовет ошибку сборки. +> - Использование относительного пути в URL-поле `metadata` без настройки `metadataBase` вызовет ошибку сборки. > - Next.js нормализует дублирующиеся слеши между `metadataBase` (например, `https://acme.com/`) и относительным полем (например, `/path`) до одного слеша (например, `https://acme.com/path`). #### Композиция URL @@ -384,7 +385,7 @@ export const metadata = { Композиция URL отдаёт предпочтение намерениям разработчика перед семантикой обхода директорий по умолчанию. - Конечные слеши между `metadataBase` и полями `metadata` нормализуются. -- "Абсолютный" путь в поле `metadata` (который обычно заменяет весь путь URL) обрабатывается как "относительный" путь (начиная с конца `metadataBase`). +- "Абсолютный" путь в поле `metadata` (который обычно заменяет весь путь URL) рассматривается как "относительный" путь (начиная с конца `metadataBase`). Например, для следующего `metadataBase`: @@ -402,7 +403,7 @@ export const metadata = { } ``` -Любые поля `metadata`, которые наследуют указанный выше `metadataBase` и задают собственное значение, будут разрешены следующим образом: +Любые поля `metadata`, которые наследуют вышеуказанный `metadataBase` и устанавливают собственное значение, будут разрешены следующим образом: | Поле `metadata` | Разрешённый URL | | -------------------------------- | -------------------------------- | @@ -602,11 +603,11 @@ export const metadata = { ### `themeColor` -> **Устарело**: Опция `themeColor` в `metadata` устарела в Next.js 14. Используйте вместо этого [конфигурацию `viewport`](/docs/app/api-reference/functions/generate-viewport). +> **Устарело**: Опция `themeColor` в `metadata` устарела в Next.js 14. Вместо неё используйте [`viewport` конфигурацию](/docs/app/api-reference/functions/generate-viewport). ### `colorScheme` -> **Устарело**: Опция `colorScheme` в `metadata` устарела в Next.js 14. Используйте вместо этого [конфигурацию `viewport`](/docs/app/api-reference/functions/generate-viewport). +> **Устарело**: Опция `colorScheme` в `metadata` устарела в Next.js 14. Вместо неё используйте [`viewport` конфигурацию](/docs/app/api-reference/functions/generate-viewport). ### `manifest` @@ -626,7 +627,7 @@ export const metadata = { Спецификация Twitter используется (удивительно) не только для X (ранее известного как Twitter). -Подробнее о [справочнике по разметке Twitter Card](https://developer.x.com/en/docs/twitter-for-websites/cards/overview/markup). +Подробнее о [Twitter Card markup reference](https://developer.x.com/en/docs/twitter-for-websites/cards/overview/markup). ```jsx filename="layout.js | page.js" export const metadata = { @@ -702,7 +703,7 @@ export const metadata = { ### `viewport` -> **Устарело**: Опция `viewport` в `metadata` устарела в Next.js 14. Используйте вместо этого [конфигурацию `viewport`](/docs/app/api-reference/functions/generate-viewport). +> **Устарело**: Опция `viewport` в `metadata` устарела в Next.js 14. Вместо неё используйте [`viewport` конфигурацию](/docs/app/api-reference/functions/generate-viewport). ### `verification` @@ -889,7 +890,7 @@ export const metadata = { ### `facebook` -Вы можете подключить приложение Facebook или аккаунт Facebook к вашей веб-странице для определенных социальных плагинов Facebook [Документация Facebook](https://developers.facebook.com/docs/plugins/comments/#moderation-setup-instructions) +Вы можете подключить приложение Facebook или аккаунт Facebook к вашей веб-странице для определённых Facebook Social Plugins [Документация Facebook](https://developers.facebook.com/docs/plugins/comments/#moderation-setup-instructions) > **Полезно знать**: Можно указать либо appId, либо admins, но не оба одновременно. @@ -984,7 +985,7 @@ export const metadata = { ### Типы -Вы можете добавить проверку типов к метаданным, используя тип `Metadata`. Если вы используете [встроенный плагин TypeScript](/docs/app/api-reference/config/typescript) в вашей IDE, вам не нужно вручную добавлять тип, но вы всё равно можете явно указать его при желании. +Вы можете добавить проверку типов к метаданным, используя тип `Metadata`. Если вы используете [встроенный плагин TypeScript](/docs/app/api-reference/config/typescript) в вашей IDE, вам не нужно добавлять тип вручную, но вы всё равно можете явно указать его при необходимости. #### Объект `metadata` @@ -1022,7 +1023,7 @@ export async function generateMetadata(): Promise { } ``` -##### С параметрами сегмента +##### С параметрами сегментов ```tsx filename="layout.tsx | page.tsx" import type { Metadata } from 'next' @@ -1070,18 +1071,18 @@ export const metadata = { | Метаданные | Рекомендация | | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `` | Используйте соответствующие HTTP-заголовки через [`redirect()`](/docs/app/api-reference/functions/redirect), [Middleware](/docs/app/building-your-application/routing/middleware#nextresponse), [Security Headers](/docs/app/api-reference/config/next-config-js/headers) | -| `` | Вставьте тег в сам макет (layout) или страницу. | -| `