Skip to main content
Практика завдань

Edge runtime проти Node.js runtime у Next.js

Рuntime в Next.js

Next.js підтримує два рунтайми для серверного коду: за замовчуванням Node.js runtime та Edge runtime. Кожен з них має різні можливості, характеристики продуктивності та доступність API.


Node.js Runtime (за замовчуванням)

Стандартне середовище Node.js з повним доступом до всіх API Node.js:

tsx
// За замовчуванням — без налаштувань export default async function Page() { // Повний доступ до API Node.js const fs = require("fs"); const data = fs.readFileSync("./data.json", "utf-8"); return <div>{data}</div>; }

Edge Runtime

Легкий рунтайм на основі Web APIs (схожий на Cloudflare Workers). Виконується на краях CDN для мінімальної затримки:

tsx
// Включення Edge runtime export const runtime = "edge"; export default function Page() { return <div>Це виконується на краю!</div>; }
tsx
// Edge API маршрут export const runtime = "edge"; export async function GET(request: Request) { const { searchParams } = new URL(request.url); const name = searchParams.get("name"); return Response.json({ hello: name }); }

Порівняння

ОсобливістьNode.js RuntimeEdge Runtime
Холодний стартПовільніше (~250ms)Дуже швидко (~1-5ms)
ЛокаціяОдна областьКраї по всьому світу
Максимальний час виконанняБез обмежень (варіюється залежно від хосту)Обмежений (зазвичай 30с)
Розмір пакетуБез обмеженьОбмежений (~1-4MB)
Node.js APIs✅ Повний доступ❌ Обмежений підмножина
npm пакети✅ Усі⚠️ Тільки сумісні з Web API
Файлова система✅ Модуль fs❌ Недоступний
Нативні модулі✅ Так❌ Ні
Потокова обробка✅ Так✅ Так
Web APIs✅ Так✅ Так (нативно)

Middleware (Завжди Edge)

Middleware у Next.js завжди виконується на Edge runtime:

tsx
// middleware.ts — автоматично виконується на Edge import { NextResponse } from "next/server"; import type { NextRequest } from "next/server"; export function middleware(request: NextRequest) { // Швидке виконання на краю, найближчому до користувача const country = request.geo?.country || "US"; if (country === "UA") { return NextResponse.redirect(new URL("/ua", request.url)); } return NextResponse.next(); }

Коли використовувати кожен

Використовуйте Node.js Runtime (за замовчуванням)

  • З'єднання з базами даних (Prisma, Drizzle з нативними драйверами)
  • Операції з файловою системою
  • Важкі обчислення
  • Складні npm пакети
  • Довготривалі операції

Використовуйте Edge Runtime

  • Персоналізація (гео, A/B тестування)
  • Перенаправлення та переписування
  • Перевірка токенів автентифікації
  • Простий API-відповіді
  • Коли затримка має найбільше значення

Налаштування рунтайму

tsx
// Для кожної сторінки або маршруту export const runtime = "edge"; // або "nodejs" (за замовчуванням) // У обробниках маршрутів export const runtime = "edge"; export async function GET() { return Response.json({ time: Date.now() }); }

Важливо:

Node.js runtime є за замовчуванням і підтримує всю екосистему Node.js. Edge runtime призначений для критичних шляхів продуктивності, які потребують мінімальної затримки та виконуються близько до користувачів. Використовуйте Edge для middleware, простих API та персоналізації. Використовуйте Node.js для доступу до бази даних, операцій з файлами та складної логіки.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.

Дочитали статтю?
Практика завдань