Среда выполнения 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
Бессерверное решение идеально, если вам нужен масштабируемый вариант, способный обрабатывать более сложные вычислительные нагрузки, чем среда выполнения Edge. Например, с бессерверными функциями на Vercel общий размер кода может составлять 50 МБ, включая импортированные пакеты, шрифты и файлы.
Недостаток по сравнению с маршрутами, использующими Edge, заключается в том, что бессерверным функциям могут потребоваться сотни миллисекунд для запуска перед обработкой запросов. В зависимости от трафика вашего сайта это может происходить часто, так как функции не всегда остаются "тёплыми".
Полный список доступных API см. в документации Node.js и документации Edge. Обе среды выполнения также могут поддерживать стриминг в зависимости от вашей инфраструктуры развёртывания.
Рендеринг на стороне клиента (CSR)
Узнайте, как реализовать рендеринг на стороне клиента в Pages Router.
Получение данных
Next.js предоставляет несколько способов получения данных, включая предварительный рендеринг, рендеринг на стороне сервера (SSR), генерацию статических сайтов (SSG) и инкрементальную статическую регенерацию (ISR). Узнайте, как управлять данными в приложении на Next.js.