Projetos práticos para aprender Server-Side Rendering
Um conjunto de exercícios técnicos organizados para evoluir do SSR básico ao uso avançado, com foco em HTML renderizado no servidor, desempenho e SEO.
Projeto 1 — SSR básico com Express + engine de templates
Começo simples, com renderização no servidor via template engine. O objetivo é entender o fluxo desde a requisição até a resposta com HTML estático gerado no back-end.
Fluxo recomendado:
- Configurar um servidor Express.
- Escolher um engine de templates (EJS, Pug ou Handlebars).
- Gerar HTML a partir de dados recebidos ou de uma API interna.
- Retornar HTML renderizado para o cliente, com cabeçalhos de SEO básicos.
Exemplo mínimo de código (Express + EJS):
// server.js
const express = require('express');
const path = require('path');
const app = express();
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
app.get('/', (req, res) => {
const data = {
title: 'SSR com Express + EJS',
items: ['Renderização no servidor', 'Templates dinâmicos', 'SEO básico']
};
res.render('index', data);
});
app.listen(3000, () => console.log('Servidor rodando em http://localhost:3000'));
Dicas práticas: mantenha as templates simples, separe lógica de apresentação, utilize partials para reutilização de componentes de UI, e injete dados já formatados para evitar lógica pesada no template.
Exemplo de template (views/index.ejs):
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title><%= title %></title>
</head>
<body>
<h1><%= title %></h1>
<ul>
<% items.forEach(function(item) { %>
<li><%= item %></li>
<% }) %>
</ul>
</body>
</html>
Projeto 2 — SSR com React no servidor
Exploro como renderizar componentes React no servidor e enviar HTML pronto ao cliente. Útil para melhorar SEO, tempo até o conteúdo visível e qualidade do First Paint.
Passos-chave:
- Instalar React e ReactDOMServer.
- Construir o componente React para renderização no servidor.
- Converter em HTML estático com renderToString e enviar como resposta.
- Encarar a hidratação no cliente para tornar a aplicação interativa.
Exemplo mínimo de SSR com React (Node.js):
const React = require('react');
const ReactDOMServer = require('react-dom/server');
function App({ name }) {
return React.createElement('div', null, `Olá, ${name}!`);
}
const html = ReactDOMServer.renderToString(
React.createElement(App, { name: 'Mundo' })
);
console.log(html);
// saída: <div>Olá, Mundo!</div>
Observação: SSR com React requer configuração mínima de rota no backend para renderizar o HTML e, em seguida, entregar o bundle para hidratação no cliente. Em projetos reais, utilize um bundler/servidor adequado para servir scripts de cliente junto ao HTML renderizado.
Projeto 3 — SSR moderno com Next.js (conceito essencial)
Embora seja um ecossistema completo, o objetivo aqui é entender o fluxo SSR dentro de uma framework que facilita roteamento, data fetch e otimização de performance.
Principais conceitos mostrados de forma prática:
- Princípio de páginas com renderização no servidor.
- getServerSideProps para fornecer dados na renderização da página a cada requisição.
- Get Static Props para renderização estática com revalidação opcional (SSG + ISR).
- SEO, meta tags e dados estruturados já no HTML inicial.
Exemplo mínimo de Next.js (pages/index.js):
export default function Home({ data }) {
return (
<div>
<h1>{data.title}</h1>
<p>SSR com Next.js em produção</p>
</div>
);
}
export async function getServerSideProps() {
// dados vindos de uma API interna ou cálculo
const data = { title: 'SSR com Next.js' };
return { props: { data } };
}
Notas rápidas: Next.js facilita rotas, caching, e SEO sem abrir mão de renderização server-side quando necessário. Em cenários simples, comece com getServerSideProps; para conteúdo que não muda a cada requisição, prefira getStaticProps com revalidação.
Projeto 4 — Estratégias de desempenho e SEO com SSR
Práticas que ajudam a entregar HTML renderizado rápido, com boa indexação e experiência do usuário consistente.
Táticas recomendadas:
- Escolha entre SSR puro vs Static Rendering com revalidação conforme necessidade.
- Use data-fetching eficiente: fetch no servidor, minimize chamadas redundantes, cache inteligente no back-end ou em edge.
- Hidrate somente quando necessário; adie a hidratação de partes não críticas.
- Inclua meta tags bem definidas, dados estruturados e sitemap para SEO.
- Observabilidade: logs de renderização, métricas de Time To First Byte (TTFB) e First Contentful Paint (FCP).
Boas práticas rápidas:
- Header de cache control adequado para conteúdo dinâmico.
- Monitore o tamanho do HTML renderizado pelo servidor.
- Pratique recursos críticos inline para HTML essencial.
Resumo: SSR eficaz não é apenas renderizar HTML; envolve dados, cache, hidratação, acessibilidade e SEO. Escolha a estratégia certa para cada tela/criação de rota.
Gostou? Continue aprendendo com mais conteúdos
Explore outros posts para aprofundar técnicas de renderização no servidor, otimização de performance e padrões de arquitetura.
Conheça mais artigos em yurideveloper.com:
Sou Apaixonado pela programação e estou trilhando o caminho de ter cada diz mais conhecimento e trazer toda minha experiência vinda do Design para a programação resultando em layouts incríveis e idéias inovadoras! Conecte-se Comigo!