7

SSR vs CSR: Quando Cada Abordagem Faz Sentido

O custo real de escolher errado

Uma página de marketing renderizada inteiramente no client faz o Googlebot indexar um <div id="root"></div> vazio. Uma dashboard administrativa renderizada no servidor força o backend a montar HTML complexo a cada request, desperdiçando CPU em conteúdo que nenhum crawler vai visitar. As duas decisões são erradas, mas pelos motivos opostos.

A escolha entre SSR e CSR não é filosófica. É uma decisão de engenharia que depende de três variáveis concretas: quem consome a página (crawler, usuário logado, visitante anônimo), com que frequência o conteúdo muda, e qual é o budget de infraestrutura disponível.

Como SSR e CSR funcionam por baixo

No CSR, o servidor entrega um HTML mínimo com um bundle JavaScript. O navegador baixa, parseia e executa esse bundle, que então faz fetch de dados e monta o DOM. O tempo até o usuário ver conteúdo depende do tamanho do bundle, da velocidade da conexão e da potência do dispositivo.

No SSR, o servidor executa o componente React (ou equivalente), gera o HTML completo e envia ao navegador. O usuário vê conteúdo antes de qualquer JavaScript executar. Depois, o processo de hydration conecta os event handlers ao HTML já renderizado.

// next.config.ts — configuração mínima do Next.js App Router
// O App Router usa SSR por padrão para Server Components
import type { NextConfig } from "next";

const nextConfig: NextConfig = {
  reactStrictMode: true,
  // poweredByHeader desabilitado para não expor stack ao crawler
  poweredByHeader: false,
};

export default nextConfig;

A diferença prática: no SSR, o servidor paga o custo de CPU para renderizar. No CSR, o dispositivo do usuário paga esse custo. Essa transferência de trabalho é o trade-off central.

Matriz de decisão: SSR, CSR ou nenhum dos dois

Antes de comparar código, a decisão precisa de critérios explícitos. A tabela abaixo cobre os cenários mais comuns.

CritérioSSR faz sentidoCSR faz sentidoConsidere SSG/ISR
SEO é requisito de negócioSim: crawler recebe HTML completoNão: crawler vê HTML vazio ou parcialSim, se conteúdo muda pouco
Conteúdo personalizado por usuárioSim, mas com custo de CPU por requestSim: dados carregados após autenticaçãoNão se aplica
Time to First Contentful PaintMenor: HTML chega prontoMaior: depende do bundle + fetchMenor ainda: HTML pré-gerado
Carga no servidorAlta: renderiza a cada requestBaixa: serve arquivos estáticosMínima: CDN serve cache
Interatividade pesada (editor, canvas)Não compensa: hydration é custosaSim: toda lógica roda no clientNão se aplica
Dados mudam a cada segundoSim, com streaming ou cache curtoSim, via WebSocket ou pollingNão: cache invalida rápido demais
Budget de infra limitadoCuidado: CPU escala com tráfegoSim: CDN + API separada é baratoSim: build-time, sem runtime

A coluna "Considere SSG/ISR" existe porque SSR e CSR não são as únicas opções. Static Site Generation (SSG) e Incremental Static Regeneration (ISR) resolvem cenários que nenhum dos dois cobre bem.

SSR na prática: página de produto com dados dinâmicos

Um e-commerce precisa que o Googlebot indexe título, preço e descrição. O conteúdo muda quando o estoque atualiza. SSR resolve isso.

// app/products/[slug]/page.tsx — Server Component (Next.js App Router)
// Server Components são SSR por padrão: sem "use client", sem useState
import { notFound } from "next/navigation";
import { getProductBySlug } from "@/lib/products";
import { AddToCartButton } from "@/components/add-to-cart-button";

interface ProductPageProps {
  params: Promise<{ slug: string }>;
}

export default async function ProductPage({ params }: ProductPageProps) {
  const { slug } = await params;
  const product = await getProductBySlug(slug);

  if (!product) {
    notFound();
  }

  return (
    <article>
      <h1>{product.name}</h1>
      <p>{product.description}</p>
      {/* Preço rende

---

Leia o artigo completo em [https://www.vivodecodigo.com.br/nextjs/ssr-vs-csr-quando-usar-server-side-client-side-rendering](https://www.vivodecodigo.com.br/nextjs/ssr-vs-csr-quando-usar-server-side-client-side-rendering)
Carregando publicação patrocinada...
2

Eu gosto de quem faz um trabalho para apresentar algo que gere valor para as pessoas e tenho que parabenizar quem faz isso. Para ser mais útil vou comentar algo pessoal, sei que muitas pessoas discordam e eu mesmo posso eventualmente fazer diferente quando for necessário.

Lembre-se que sempre pode existir exceções e entender quando uma cabe precisa experiência e não ficar preso a "boas práticas", precisa entender bem com profundidade todo o processo e querer de fato fazer engenharia, e faz parte da engenharia saber quando a solução menos engenhosa é aplicável.

Existem essencialmente dois tipos de solução web que existem e a postagem original já fala delas logo de cara. Websites e Web applications.

Eu sou um questionados das Web apps, quase sempre que se opta por isso é preguiça e seguir a modinha antes de tudo. Aplicações funcionam melhor nativamente. Mas eu entendo porque acontece isso e eu mesmo posso ou ser preguiçoso ou fazer o que alguns fazem, ser político, não engenheiro por completo.

Mas vou considerar aqui que faz sentido fazer uma aplicação web para efeitos de comparação.

Para websites é muito simples, você quer um SEO bom, e não, o Google não indexa bem seus documentos renderizados no cliente, você deve renderizar no cliente. Mais ainda, quase sempre a maioria das páginas deveriam ser renderizadas de forma estática e entregues compactadas, até para ajudar o SEO, além da experiência do usuário. Tem exceções, tem páginas de busca e filtro e outras necessidades específica que provavelmente devem ser renderizadas no servidor sob demanda. Em alguns casos meio que tanto faz o momento da renderização, só o local importa.

Conteúdo mudar pouco muitas vezes é até mesmo várias vezes ao dia, o que quase tudo encaixa. Especialmente essa é uma forma melhor se o acesso simples ao conteúdo ocorre de forma muito pesada. Alterar muito é muitas vezes por minuto.

Para aplicações costuma ser o contrário, primeiro porque não precisa de SEO, segundo n~]ao costuma ter ganhos prerenderizar e finalmente porque diminui a carga no servidor, embora na maioria das vezes isso não é um grande problema, então renderizar no servidor não é um problema, a não ser que se meça que a experiência do usuário esteja boa ou não, e não tenha uma carga muito grande.

Quanto mais essa é opção, mais deveria ser uma aplicação desktop, mesmo que quase todo o mercado ache o contrário, até por questões comerciais/financeiras (fazer um SaaS para faturar e lucrar mais - ainda que dê para fazer SaaS não web). A escolha por web geralmente é formação deficiente.

Existem soluções híbridas, que parte é um website e parte é uma web app, o que não muda o critério, mas cada parte da solução tem uma estratégia diferente. O exemplo mais óbvio é o e-commerce que é website até que você vá finalizar a compra e interagir com seu perfil de comprador, ou o backoffice do vendedor seja usado.

Websites deveriam evitar JavaScript, e o que tem seja só uma melhoria, a página deveria funcionar sem, deveria usar HTML e principalmente CSS muito moderno, especialmente deveria evitar código muito complexos, especialmente de JS. Nem tente usar outra linguagem de programação, mesmo que gere JS depois.

Para web apps, já que a decisão provavelmente está só seguindo a modinha, seja por decisão do engenheiro ou "engenheiro", seja por decisão do product owner ou equivalente, quase sempre vale qualquer coisa, embora uma SPA costume fazer sentido. Mas note que o S não precisa ser realmente Single, pode ter algumas páginas, quando muda bastante o contexto.

Orçamento limitado para algo de grande tráfego tem algum problema.

Um adendo importante é sobre soluções que alguém usará uma vez ou raramente: por alguma razão, até bizarra, as pessoas tendem a fazer um mobile app para resolver essa questão, o que é um absurdo, fazer uma pessoa baixar um aplicativo, quase sempre enorme, porque apps para iOS e Android costuma ser muito grandes, ao contrário do que acontece no desktop, embora muitas pessoas nem saibam disso porque aprenderam só a modinha, e gere um passivo para o usuário. De forma muito mais forte do que optar por uma aplicação (não website) desktop, no mobile a aplicação quase sempre é a escolha errada, e quase todo mundo comete esse erro. Por favor parem de me obrigar instalar um app para fazer um cadastro ou consulta ou algo pontual e nunca mais acessar aquilo. Eu não não vou instalar a porcaria do seu app!

Nada aqui vai contra a postagem original. Lembre-se que React é uma das soluções, existem várias outras que podem ser melhores por diversas razões.

Reforço: tudo tem exceção e eu estou colocando algo que pode não encaixar bem com o que o mercado demanda, mesmo sendo uma demanda errada.

S2


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui).