Edge SSR com Astro 6 e Cloudflare D1: padrões e armadilhas
Astro 6 com adapter Cloudflare e D1 viabiliza SSR global sub-100ms, mas exige disciplina em cache HTTP, agregação de queries e uso correto de waitUntil para tarefas em background.
Principais conclusões
- 01Astro 6 SSR + Cloudflare Workers entrega TTFB 30–80ms global sem rebuild.
- 02API antiga Astro.locals.runtime.env foi removida — use import { env } from cloudflare:workers.
- 03Cache-Control HTTP é a forma mais barata de baixar custo de Worker invocations.
- 04D1 não escala JOIN pesado — denormalize ou use KV/Cache API como camada extra.
- 05waitUntil() libera resposta enquanto pings IndexNow/Google rodam em background.
Por que edge SSR ganha de SSG para conteúdo dinâmico
SSG é imbatível para páginas que mudam pouco — você gera HTML uma vez e o CDN serve a velocidade da luz. Mas blogs com publicação frequente, listagem por categoria e busca pagam um preço alto: cada novo artigo dispara rebuild + redeploy. Em escala, isso vira o gargalo.
Edge SSR resolve isso renderizando sob demanda no datacenter mais perto do usuário. Com Cloudflare Workers + D1, o tempo até o primeiro byte fica em torno de 30–80ms globalmente, sem rebuild.
Como configurar Astro 6 com adapter Cloudflare
O ponto crítico é entender que Astro 6 mudou como o ambiente é exposto. A API antiga Astro.locals.runtime.env foi removida; agora você importa direto de cloudflare:workers.
Bindings e platformProxy
Em desenvolvimento, ative platformProxy no adapter para que astro dev tenha acesso ao D1 local via miniflare. Em produção, os bindings vêm direto do wrangler.toml.
Padrões de cache que funcionam na edge
Cache na edge é regido por headers HTTP padrão. As três regras que economizam mais dinheiro: (1) use Cache-Control: public, max-age=N generoso em rotas estáveis (sitemap, llms.txt, robots.txt); (2) use no-store em health checks; (3) nunca cache rotas autenticadas.
Armadilhas comuns com D1
D1 é SQLite na edge — a maior parte dos padrões SQL funciona, mas tem limites. Queries pesadas com JOIN em milhões de rows não escalam — prefira denormalização ou uma cache layer separada (KV ou Cache API). E lembre que cada query roda no datacenter de origem do D1, não na edge — isso adiciona ~30ms para usuários longe do datacenter primário.
Tarefas em background com waitUntil
Quando você publica um artigo, precisa pingar IndexNow e o sitemap do Google. Esses pings podem demorar 500ms — bloquear a resposta do publish é caro. A solução é waitUntil(): você devolve a resposta ao cliente imediatamente e o Worker continua executando o ping em background.
Perguntas frequentes
Edge SSR substitui SSG para sempre?
Qual o limite prático do D1 hoje?
Como migrar de Astro 5 para 6 sem quebrar?
Posso usar Drizzle ORM com D1?
Sobre o autor
Equipe Editorial
Equipe responsável pela curadoria, revisão e publicação de artigos técnicos no blog.