sexta-feira, 7 de novembro de 2025

SSR - A Arte (e a Engenharia) de renderizar no servidor

Imagine que você entra em https://minhaloja.com/produtos e, em menos de um segundo, a página inteira já aparece renderizada, lista de produtos, imagens, preços... tudo visível, mesmo que o JavaScript ainda nem tenha terminado de carregar.

✨ Isso é SSR, Server-Side Rendering em ação.

Mas o que realmente acontece nos bastidores?
Como o servidor consegue "montar" uma interface antes mesmo do navegador?
E por que isso muda completamente SEO, performance e arquitetura de uma aplicação moderna?

Neste artigo, vamos mergulhar fundo:
➡️ Entender como o SSR funciona internamente;
➡️ Comparar React (Next.js) e Vue (Nuxt);
➡️ Explorar hidratação, caching, edge runtimes e arquitetura moderna.

Tudo isso de forma técnica, acessível e visual

O que é SSR (Server-Side Rendering)?

SSR é uma técnica onde o servidor gera o HTML completo da página antes de enviá-la ao navegador.
Ou seja:

  1. O cliente faz uma requisição (GET /produtos)
  2. O servidor executa o código da aplicação (React ou Vue)
  3. Gera o HTML renderizado
  4. Envia o HTML pronto para o navegador
  5. O navegador exibe o conteúdo imediatamente
  6. O JavaScript é baixado e hidrata a aplicação (ativando interações)

💡 Em resumo:

  • SSR = “Renderizar antes de enviar”

  • CSR (Client-Side Rendering) = “Enviar e renderizar depois”

O Ciclo técnico do SSR

Vamos visualizar o que acontece no fluxo completo:

[Cliente] GET /produtos
   ↓
[Servidor Node.js ou Edge Runtime]
   ↓
[Next.js / Nuxt]
   ├─ Faz fetch de dados (API, DB)
   ├─ Renderiza componentes React/Vue
   └─ Gera HTML final com renderToString()
   ↓
[Servidor envia HTML pronto]
   ↓
[Navegador exibe instantaneamente]
   ↓
[JS carrega e hidrata interatividade]

Exemplo prático - React (Next.js)


O Next.js executa isso no servidor:

  • Faz o fetch dos produtos;

  • Renderiza o componente em HTML;

  • Envia o HTML renderizado ao navegador;

  • Depois o JS hidrata e ativa o app.

Exemplo prático - Vue (Nuxt)


O Nuxt faz o mesmo pipeline:

  • O useFetch() roda no servidor durante a requisição;

  • O HTML é pré-gerado;

  • Enviado pronto para o cliente;

  • O Vue hidrata e ativa reatividade.

O que é Hidratação?

Quando o navegador recebe o HTML SSR, ele já monta a árvore DOM real.

Depois disso:

  • O framework (React ou Vue) recria internamente o Virtual DOM;

  • Compara com o DOM real que já existe;

  • Reatacha eventos e estados, tornando tudo interativo.

💡 Sem hidratação, o HTML SSR seria só estático — bonito, mas “morto”.

Diferença visual entre CSR e SSR

CSR:


→ Nada visível até o JS carregar.

SSR:

→ Conteúdo visível antes mesmo do JS carregar.

O motor interno do SSR

Tanto Next.js quanto Nuxt fazem basicamente o mesmo:

React:


Vue:


Arquitetura interna - Camadas do SSR

Camada Função
Runtime Ambiente de execução (Node, Deno, Edge)
Data Fetching Busca dados antes da renderização
Renderer Transforma componentes em HTML (ReactDOMServer / @vue/server-renderer)
Hydrator Reatacha o JS no navegador
Cache Layer Armazena HTML renderizado para performance
CDN Layer Distribui respostas próximas do usuário

Estratégias de Cache e Revalidação

SSR puro pode ser pesado, pois gera HTML a cada request.
Por isso, usa-se cache e regeneração inteligente:

  • CDN cache (Vercel / Cloudflare): armazena o HTML próximo do usuário

  • Redis ou memória local (LRU cache): cache do servidor

  • Revalidação (ISR / SWR): atualiza em segundo plano

🧩 Exemplo de ISR no Next.js:


Evoluções Modernas: SSR 2.0

🧠 Streaming SSR

Permite enviar o HTML em fluxo contínuo, sem esperar a página toda renderizar.

React 18:

ReactDOMServer.renderToPipeableStream(<App />, res);

Vue 3:

renderToNodeStream(app).pipe(res);

✅ Reduz o TTFB (Time To First Byte)
✅ Melhora a percepção de velocidade

🌍 Edge SSR

Executa a renderização no limite da rede, ou seja, próximo ao usuário.

  • Cloudflare Workers

  • Vercel Edge Functions

  • Deno Deploy

Resultado: latência quase zero.

🪶 Islands Architecture

Renderiza apenas partes interativas (“ilhas”), o resto é HTML estático.

Usado por:

  • Astro

  • Qwik

  • Nuxt Islands

  • React Server Components

💡 Exemplo: o cabeçalho e o footer são HTML puro, e apenas o carrinho é hidratado.

📊 Métricas de Performance no SSR

Métrica O que mede Impacto no SSR
TTFB Tempo até o primeiro byte Pode aumentar um pouco
FCP Primeiro conteúdo visível Excelente (HTML vem pronto)
LCP Maior elemento visível Ótimo se JS for leve
TTI / INP Tempo até interatividade Depende da hidratação

💡 Dica: use code splitting, React.lazy() ou defineAsyncComponent() no Vue.

🌍 SSR e SEO

Crawlers (Googlebot, Bing, etc.) lêem o HTML inicial.
Com SSR, o conteúdo já está pronto: SEO instantâneo.
Com CSR, o conteúdo depende do JS: pode nem ser indexado.

📈 SSR = SEO + Performance + UX

🧭 SSR, CSR e SSG (Comparativo)

Estratégia Quem renderiza Quando Ideal para
CSR Navegador Após download do JS SPAs, dashboards
SSR Servidor A cada request E-commerces, apps dinâmicos
SSG Build Antes do deploy Blogs, portfólios
ISR Servidor + Cache Após expiração Conteúdo semi-estático

SSR é o DNA da Web Moderna!!

SSR não é só uma técnica, é uma filosofia de arquitetura que une frontend e backend.

Ele:

  • Entrega conteúdo rápido (UX)

  • Melhora SEO

  • Mantém interatividade

  • Garante segurança e controle de dados

🔹SSR é “renderizar antes do usuário ver”. SSR é um pipeline distribuído de renderização, com cache, streaming e edge orchestration.

SSR é quando o servidor pensa como o navegador e o navegador age como o servidor

Nenhum comentário:

Postar um comentário