Capítulo 39 de 456

Deploying to Platforms

Core Idea

Explica quais capacidades de infraestrutura cada feature do Next.js exige e como avaliar se uma plataforma de deploy suporta o app corretamente vs. com performance ótima.

Key Concepts

  • Functional fidelity: toda feature funciona corretamente; contrato binário validado pelo adapter test suite (passa ou não passa).
  • Performance fidelity: features atingem a característica de performance ideal (ex.: shell estático da PPR servido em latência de CDN); é um espectro, difere por plataforma.
  • Streaming Required: a plataforma precisa suportar chunked transfer encoding/HTTP2 e não pode bufferizar a resposta antes de enviar ao client.
  • Shared Cache Recommended: múltiplas instâncias se beneficiam de cache compartilhado para propagar revalidação/tags entre si; sem isso cada instância mantém cache independente (ainda funcional, mas sem coordenação).
  • Edge Stitching: otimização de performance (não requisito de corretude) usada por PPR; toda feature funciona a partir de um único servidor origin.
  • Deployment Adapter API: adapterPath em next.config.js; roda em build time, produz output específico da plataforma a partir do build padrão do Next.js; qualquer um pode construir um adapter, sem acesso especial.
  • Verified adapter: precisa ser open source E rodar o compatibility test suite completo; listado sob a org GitHub do Next.js.
  • cacheHandler: cobre cache de servidor (ISR, route handlers, fetch/unstable_cache com patch, image optimization).
  • cacheHandlers (plural): configura backends para o diretivo 'use cache'.

Reference Tables

FeatureStreamingShared CacheEdge StitchingNotas
Server ComponentsRequiredNoNoStreaming básico
ISR (time-based)NoRecommendedNoFunciona por instância sem shared cache
ISR (on-demand)NoRecommendedNoPropagação de tag precisa de shared cache multi-instância
Partial PrerenderingRequiredRecommendedOptionalVer PPR Platform Guide
Cache Components (use cache)RequiredRecommendedNoShared cache dá consistência cross-instância
Proxy / MiddlewareNoNoNoRoda em edge ou origin
Server ActionsRequiredNoNoPOST com resposta em streaming
after()NoNoNoRequer suporte a graceful shutdown
CDNEdge ComputeKV/TagsBlob StoragePPR Resuming
CloudflareWorkersKVR2Sim (worker)
AkamaiEdgeWorkersEdgeKVObject StorageSim (worker)
Amazon CloudFrontLambda@EdgeKeyValueStoreS3Sim (Lambda)
FastlyComputeKV StoreObject StorageSim (WASM)
AzureFunctionsManaged RedisBlob StorageSim (server)
Google CloudCloud RunVarious KVCloud StorageSim (server)

Anti-patterns

  • Assumir que falta de Edge Stitching quebra a feature: é otimização de performance, não requisito de corretude; tudo funciona de um único origin.
  • Tratar building blocks de CDN (KV, blob storage) como integração pronta: a maioria dos community adapters hoje só faz deploy como container Docker/Node.js, sem usar primitivas edge-specific.

Key Takeaways

  1. O requisito mínimo absoluto para rodar Next.js é um servidor Node.js; sharp é a única dependência extra obrigatória (Image Optimization).
  2. Use o adapter test suite como critério objetivo de "a plataforma suporta Next.js" (functional fidelity), separado de quão rápido ela entrega (performance fidelity).
  3. Sem shared cache, ISR/Cache Components ainda funcionam, mas revalidação não se propaga entre instâncias.
  4. cacheHandler (singular) e cacheHandlers (plural) cobrem caminhos de cache diferentes: legado/ISR vs. 'use cache'.
  5. Adapter aberto + rodando o compatibility suite = "verified adapter"; adapters fechados podem existir mas nunca serão listados como verified.

Connects To

  • Debugging (ch038): streaming afeta como erros aparecem no DevTools durante dev vs. produção.
  • Draft Mode (ch040): Draft Mode desativa cache de resposta ISR, interagindo com o mesmo modelo de cache discutido aqui.
  • Environment Variables (ch041): runtime env vars exigem servidor Node.js compatível com dynamic rendering, o mesmo requisito mínimo desta página.