Edge и Node.js среды выполнения
В контексте Next.js среда выполнения (runtime) представляет собой набор библиотек, API и общих функциональных возможностей, доступных вашему коду во время выполнения.
На сервере существуют две среды выполнения, где могут быть отрисованы части вашего кода приложения:
- Среда выполнения Node.js (по умолчанию) имеет доступ ко всем API Node.js и совместимым пакетам из экосистемы.
- Среда выполнения Edge основана на Web API.
Сравнение сред выполнения
При выборе среды выполнения необходимо учитывать множество факторов. Эта таблица наглядно демонстрирует основные различия. Если вы хотите более подробный анализ отличий, ознакомьтесь с разделами ниже.
| Node | Serverless | Edge | |
|---|---|---|---|
| Холодный старт | / | Нормальный | Низкий |
| Потоковая передача HTTP | Да | Да | Да |
| Ввод/вывод | Полный | Полный | fetch |
| Масштабируемость | / | Высокая | Самая высокая |
| Безопасность | Нормальная | Высокая | Высокая |
| Задержка | Нормальная | Низкая | Самая низкая |
| npm пакеты | Все | Все | Подмножество |
| Статическая отрисовка | Да | Да | Нет |
| Динамическая отрисовка | Да | Да | Да |
Перепроверка данных с fetch |
Да | Да | Да |
Среда выполнения Edge
В Next.js лёгкая среда выполнения Edge представляет собой подмножество доступных API Node.js.
Среда выполнения Edge идеально подходит, если вам нужно предоставлять динамическое и персонализированное содержимое с низкой задержкой с помощью небольших и простых функций. Скорость среды выполнения Edge обусловлена её минимальным использованием ресурсов, но это может быть ограничением во многих сценариях.
Например, код, выполняемый в среде выполнения Edge на Vercel, не может превышать от 1 МБ до 4 МБ, это ограничение включает импортированные пакеты, шрифты и файлы, и будет меняться в зависимости от вашей инфраструктуры развертывания. Кроме того, среда выполнения Edge не поддерживает все API Node.js, что означает, что некоторые npm пакеты могут не работать. Например, "Module not found: Can't resolve 'fs'" или подобные ошибки. Мы рекомендуем использовать среду выполнения Node.js, если вам необходимо использовать эти API или пакеты.
Среда выполнения Node.js
Использование среды выполнения Node.js предоставляет вам доступ ко всем API Node.js и ко всем npm пакетам, которые на них опираются. Однако, она не так быстро запускается, как маршруты, использующие среду выполнения Edge.
Развертывание вашего приложения Next.js на сервере Node.js потребует управления, масштабирования и настройки вашей инфраструктуры. В качестве альтернативы, вы можете рассмотреть возможность развертывания вашего приложения Next.js на серверной платформе, такой как Vercel, которая позаботится об этом за вас.
Серверная Node.js
Serverless идеально подходит, если вам нужна масштабируемое решение, которое может обрабатывать более сложные вычислительные нагрузки, чем среда выполнения Edge. С помощью Serverless функций на Vercel, например, общий размер вашего кода составляет 50 МБ, включая импортированные пакеты, шрифты и файлы.
Недостатком по сравнению с маршрутами, использующими Edge, является то, что серверным функциям может потребоваться сотни миллисекунд для запуска перед началом обработки запросов. В зависимости от количества трафика вашего сайта, это может быть частым явлением, так как функции не часто "разогреты".
Примеры
Параметр среды выполнения сегмента
Вы можете указать среду выполнения для отдельных сегментов маршрутов в вашем приложении Next.js. Для этого объявите переменную с именем runtime и экспортируйте её. Переменная должна быть строкой и иметь значение либо 'nodejs', либо 'edge' среды выполнения.
Следующий пример демонстрирует сегмент маршрута страницы, который экспортирует runtime со значением 'edge':
export const runtime = 'edge' // 'nodejs' (default) | 'edge'
Вы также можете определить runtime на уровне макета, что заставит все маршруты под макетом работать в среде выполнения Edge:
export const runtime = 'edge' // 'nodejs' (default) | 'edge'
Если среда выполнения сегмента не задана, будет использоваться среда выполнения по умолчанию nodejs. Вам не нужно использовать опцию runtime, если вы не планируете переключаться со среды выполнения Node.js.
Обратитесь к документации Node.js и документации Edge для получения полного списка доступных API. Обе среды выполнения также могут поддерживать потоковую передачу в зависимости от вашей инфраструктуры развертывания.
© 2024 Vercel, Inc.
Licensed under the MIT License.
https://nextjs.org/docs/app/building-your-application/rendering/edge-and-nodejs-runtimes