← Angular: componentes, reatividade e decisões de aplicação
10 / 10 · 65 MIN

Renderização, hidratação e evidência de entrega

Escolher CSR, SSR e prerender segundo disponibilidade dos dados e isolamento. Interpretar a correspondência de hidratação, a duração do estado no servidor e os limites da evidência necessária para aceitar uma entrega.

O modo acompanha a disponibilidade dos dados

Client renderiza a aplicação no browser; Server produz HTML por pedido; Prerender gera documentos durante o build. Uma estratégia híbrida escolhe por rota em vez de impor a mesma decisão a todos os conteúdos. Artigos públicos conhecidos antecipadamente podem ser bons candidatos a prerender, enquanto dados por sessão exigem obtenção no momento adequado e isolamento.

A escolha influencia custo e experiência, mas não substitui medições no produto concreto. HTML produzido antecipadamente também não dispensa títulos, conteúdo substancial, status de resposta e política de indexação apropriados.

Enumerar rotas no build

getPrerenderParams fornece os mapas de parâmetros que identificam documentos a gerar para uma rota parametrizada. No exemplo, dois slugs produzem duas instâncias conhecidas de articles/:slug. Esta enumeração tem de usar informação disponível no build, não a identidade de um visitante futuro.

Mais parâmetros podem aumentar tempo de build e volume de ficheiros. Define também o comportamento para endereços que não foram enumerados segundo a configuração completa da aplicação. O exemplo delimita a lista conhecida e não implementa uma política completa para todos os possíveis slugs.

Código compatível com servidor e browser

Construir um componente no servidor não disponibiliza automaticamente window, navigator ou APIs de layout do browser. Trabalho que depende dessas APIs precisa de implementação adequada à plataforma ou inicialização num ponto exclusivo do browser, como afterNextRender.

Mantém a saída inicial coerente: escolher templates estruturalmente diferentes por uma condição de plataforma pode criar mismatch de hidratação. A solução não é apenas silenciar o erro de variável indefinida. Identifica os dados necessários ao primeiro HTML e o trabalho que pode ocorrer depois, quando o ambiente suporta a interação.

Hidratar exige correspondência estrutural

Hidratação restaura a aplicação no cliente reutilizando DOM produzido no servidor. A configuração provideClientHydration deve integrar os providers adequados no arranque do cliente e do servidor. A correspondência inclui estrutura, comentários e whitespace relevante, não apenas texto visível.

Um otimizador que remove nós ou uma biblioteca que os desloca antes da hidratação pode alterar o contrato. HTML inválido também pode ser corrigido pelo browser, produzindo uma árvore inesperada. Ao diagnosticar, compara a saída do servidor, a resposta após intermediários e a árvore encontrada no cliente.

Interações, estabilidade e soluções limitadas

Event replay conserva interações nativas suportadas ocorridas antes de a aplicação conseguir tratá-las e volta a apresentá-las após hidratação. Não é uma fila durável nem uma garantia de exatamente um commit remoto. A estabilidade da aplicação também condiciona fases de hidratação; perante atrasos, investiga trabalho pendente em vez de aceitar qualquer espera arbitrária. ngSkipHydration pode isolar um componente incompatível, mas só é válido no host de um componente e recria a respetiva subárvore.

Perdem-se benefícios de hidratação nesse âmbito; a causa estrutural continua a precisar de correção.

Estado por pedido e dados transferidos

Um objeto mutável configurado como useValue num provider top-level pode persistir entre pedidos no processo servidor. Se contém dados de utilizador, o âmbito está errado para isolamento por pedido. Uma factory adequada cria valores no momento e âmbito pretendidos.

O cache de transferência HTTP também precisa de análise: dados podem ser serializados no HTML inicial e reutilizados pelo browser até à estabilidade. As exclusões documentadas para credenciais e regras que proíbem caching não devem ser removidas indiscriminadamente.

Confirma quem recebe os dados e se a reutilização é permitida antes de alterar essa configuração.

Aceitação baseada em comportamentos observados

Para aceitar uma entrega, relaciona configuração com resultados: o documento inicial contém o conteúdo esperado, a rota representa a identidade correta, a hidratação conserva a interação e os dados privados ficam no âmbito autorizado. Exercita também falhas relevantes no ambiente apropriado e distingue observação de inferência.

O percurso ensina a interpretar estes contratos através de escolhas e cenários; não exige executar os excertos como avaliação. Uma configuração plausível ou um teste isolado não demonstra automaticamente desempenho, indexação real, acessibilidade integral ou segurança de todo o sistema.

// Reading example: server route configuration fragment, not a complete application.
import {ApplicationConfig} from '@angular/core';
import {RenderMode, ServerRoute, provideServerRendering, withRoutes} from '@angular/ssr';
export const serverRoutes: ServerRoute[] = [
  {
    path: 'articles/:slug', renderMode: RenderMode.Prerender,
    async getPrerenderParams() {
      return [{slug: 'routing-contracts'}, {slug: 'state-ownership'}];
    },
  },
  {path: 'account', renderMode: RenderMode.Client},
  {path: '**', renderMode: RenderMode.Server},
];
export const serverConfig: ApplicationConfig = {
  providers: [provideServerRendering(withRoutes(serverRoutes))],
};
// Browser/server application routes, components, hydration setup and authenticated
// account API are configured separately; this fragment supplies none of those.
NA PRÁTICA

Dois artigos públicos conhecidos são enumerados para prerender. account é renderizado no cliente e continua a precisar de uma API autenticada com autorização própria. As restantes rotas usam SSR. A configuração não implementa os componentes, não garante confidencialidade por escolher Client e não demonstra que a hidratação esteja instalada ou validada.

Armadilhas comuns

Prerender de informação personalizada sem isolamento; acesso a window durante SSR; alteração de nós por um intermediário; estado de utilizador em useValue global; cache de transferência indiscriminado; ngSkipHydration aplicado a qualquer elemento; inferir exatamente um efeito remoto de event replay.

Tópicos relacionados: Routing, estado e decisões de navegação · Fronteiras de segurança e conteúdo confiável · Testar comportamentos e limites de integração

Leva esta ideia contigo

Escolhe onde e quando renderizar, conserva a estrutura que será hidratada e limita a duração de dados por utilizador. A aceitação deve observar conteúdo, interação, isolamento e falhas dentro do ambiente relevante; configuração e contagens de testes são apenas parte dessa evidência.

Criar conta

Referência: Route-specific rendering · Angular 22; standalone components