R
Interview Deckreact · next.js · senior/staff
0·0·122
Next.js

Edge Runtime vs Node Runtime

Edge: V8 isolates, baixa latência global, APIs limitadas. Node: ambiente completo, mais APIs, mais lento.

Next.js suporta dois runtimes: Edge (V8 isolates rodando em CDN edge global, baixa latência, mas com APIs Web restritas — sem Node modules). Node (Node.js completo, todas as APIs, deploy em servidor central). Configurado por route via export const runtime.

Problema
Latência global (servidor central distante de usuários) vs limitações de APIs (Edge não tem fs, http2, alguns DB drivers).
Solução
Edge para rotas leves e globais (auth, redirects, A/B testing). Node para rotas pesadas, com DB, libs grandes, ou que precisam de Node APIs.
Tip
Cold starts no Edge são quase zero. No Node serverless, pode ser 100ms-2s. Para APIs críticas, Edge ganha em latência mas perde em ecossistema.
// app/api/edge/route.ts
export const runtime = 'edge';

export async function GET(req) {
  // Roda em CDN edge global, < 50ms latência
  return Response.json({ region: process.env.VERCEL_REGION });
}

// app/api/heavy/route.ts (Node default)
export async function POST(req) {
  // Pode usar Prisma, sharp, qualquer lib Node
  const result = await prisma.user.create(...);
  return Response.json(result);
}
Q.Quando usar Edge vs Node?
A.Edge: middleware, autenticação, redirects, geo-routing, cabeçalhos. Node: queries com Prisma/Drizzle, libs nativas (sharp, puppeteer), uploads grandes, integrações com APIs antigas.
Q.Edge suporta Prisma?
A.Apenas com Prisma Accelerate (proxy). Drivers diretos (PostgreSQL, MySQL) não rodam em Edge. Drizzle com Neon/PlanetScale serverless drivers funciona.
Q.Como definir runtime?
A.export const runtime = 'edge' no top do arquivo da rota/middleware. 'nodejs' é o default. Middleware é sempre Edge.
37/122← →