Pular para o conteúdo principal
5 min de leitura
Guia

Desempenho Web como Arquitetura

Por que tratar o desempenho como uma otimização de estágio final falha, e como projetar sistemas que são rápidos por padrão.

Publicado
Por Interface Atlas Team

O modo de falha de desempenho mais comum no desenvolvimento web moderno é tratar a velocidade como um bug a ser corrigido no final de um projeto.

Equipes passam meses construindo um aplicativo React massivo para um site de documentação, ignorando o tamanho crescente do bundle. Quando o site é lançado e o desempenho móvel é abismal, elas tentam “otimizá-lo” adicionando memoização, camadas de cache complexas e limites de lazy-loading.

Raramente funciona. Você não pode otimizar sua saída de uma arquitetura fundamentalmente pesada. O desempenho não é uma etapa de limpeza; é a consequência estrutural do seu modelo de renderização e de quanto JavaScript você exige que o navegador execute.

O Custo do Imposto de Hidratação

Durante a última década, o modelo mental padrão para construir um frontend foi a Single Page Application (SPA). Para fazer os SPAs carregarem mais rápido, a indústria adotou a Renderização no Lado do Servidor (SSR).

Mas o SSR introduziu o imposto de Hidratação.

A hidratação é o processo em que o navegador baixa o HTML, depois baixa o JavaScript e então executa esse JavaScript para reconectar ouvintes de eventos e reconstruir a árvore de estado. Durante a hidratação, a thread principal (main thread) é bloqueada. A página parece pronta, mas se o usuário clica em um botão, nada acontece.

A Realidade do Dispositivo

Os desenvolvedores geralmente avaliam o desempenho em MacBooks da série M em fibra gigabit. Isso produz uma falsa certeza.

Em um dispositivo Android de baixo custo em uma rede 3G, o imposto de hidratação é catastrófico. Analisar e executar 500 KB de JavaScript leva milissegundos no laptop de um desenvolvedor, mas pode levar segundos em um telefone intermediário. Durante esses segundos, o dispositivo fica congelado.

Respostas Arquitetônicas à Crise de Desempenho

Se hidratar indiscriminadamente a página inteira é o problema, a solução é a execução seletiva. A indústria produziu três respostas arquitetônicas distintas para esse problema.

Comparação de Modelos de Renderização

Veja como os modelos de renderização modernos resolvem o imposto de hidratação.

ModeloComo FuncionaO BenefícioO Custo
Hidratação Total (Next/Nuxt Padrão)O servidor renderiza HTML. O cliente carrega todo o JS e re-hidrata a página inteira.Modelo mental unificado; fácil de construir estado global complexo.Custo alto de CPU. Tempo-até-Interatividade (TTI) lento no mobile.
Arquitetura de Ilhas (Astro)A página é HTML estático. Apenas componentes específicos marcados carregam JS e hidratam.Zero JS na base. Desempenho imbatível para sites de conteúdo.O desenvolvedor deve declarar manualmente os limites interativos.
Resumibilidade (Qwik)O servidor serializa manipuladores de eventos no HTML. O cliente “resume” sem rodar código do componente.Interatividade instantânea. Zero imposto de hidratação independente do tamanho do app.Modelo mental não ortodoxo; acoplamento forte ao compilador do framework.
Componentes de Servidor (RSC)O servidor executa componentes e envia um payload proprietário ao cliente.Acesso ao backend diretamente no código da UI; bundles menores no cliente.Requer um runtime Node/Edge; semântica de cache complexa.

Exemplos Trabalhados: O Que Não Hidratar

Para construir sistemas performáticos, você deve desenvolver um instinto para o que não precisa ser interativo.

Exemplo 1: A Página de Documentação (Deve permanecer estática)

Você está construindo uma página de artigo como esta. Tem 2.000 palavras de texto, alguns blocos de código e um menu de navegação lateral.

A Arquitetura Ruim: Renderizar isso em um SPA padrão. O navegador baixa o artigo inteiro como um payload JSON, mais o runtime do React, mais o roteador, e então constrói os elementos do DOM no cliente. A Arquitetura Boa: Renderizar como HTML estático. O único JavaScript necessário é um script minúsculo para alternar o menu de navegação móvel.

Exemplo 2: A Página de Produto E-Commerce (Híbrida)

Você tem uma página de produto com uma descrição estática, um carrossel de imagens e um botão “Adicionar ao Carrinho” que atualiza um contador de carrinho global.

A Arquitetura Ruim: Hidratar a página inteira para que o botão “Adicionar ao Carrinho” possa falar com o cabeçalho. O navegador desperdiça ciclos de CPU hidratando o rodapé e a descrição estática do produto. A Arquitetura Boa (Ilhas): A descrição do produto e o rodapé são HTML estático. O Carrossel de Imagens é uma Ilha. O botão “Adicionar ao Carrinho” é outra Ilha. Eles se comunicam via eventos customizados leves ou uma pequena store compartilhada (como Nano Stores), sem acordar o resto da página.

Regras de Decisão para Sistemas Primeiro-Conteúdo

Se você está construindo uma publicação, site de marketing ou base de conhecimento, adote estas heurísticas:

  1. Padrão para HTML: Comece com zero JavaScript. Exija justificativa para cada byte de JS adicionado.
  2. Isole a Interatividade: Se você precisa de uma calculadora complexa em uma página de artigo, construa-a como uma Ilha. Não faça o artigo pagar o custo de desempenho da calculadora.
  3. Evite Avaliação Apenas no Desktop: Nunca aprove uma estratégia de renderização sem estrangular sua CPU para lentidão de 4x e sua rede para Fast 3G nas DevTools.
  4. Arquitete para o Percentil 90: Se 90% do seu site é material de leitura e 10% são formulários interativos, escolha uma arquitetura otimizada para leitura (como o Astro), não uma arquitetura otimizada para estado complexo (como um SPA completo).

Você sempre pode adicionar uma ilha interativa a uma página estática, mas não pode remover facilmente o imposto de hidratação de um SPA.

Guias e Termos Relacionados

Aprofunde seu entendimento: