Pular para o conteúdo

Voltar para projetos

Frontend

Navegação instantânea sem abrir mão de um site 100% funcional sem JS

· 6 min

Um site majoritariamente estático, renderizado no servidor, onde cada rota existe como um arquivo HTML de verdade, tem um custo real em toda navegação interna: um clique num link comum descarta a página inteira e reconstrói tudo, reprocessa o CSS, reconfere fontes que já estavam em cache, reexecuta cada script do zero, mesmo que o cabeçalho, o rodapé e a maior parte da navegação sejam idênticos entre uma página e outra.

Ilustração de dois elos de corrente com um raio

O custo escondido de um link comum

Na prática, a maior parte do que é recarregado a cada navegação não muda: o cabeçalho, o rodapé e o CSS/JS já carregados continuam exatamente os mesmos de uma página pra outra. Só o conteúdo principal realmente é diferente, mas um link comum não sabe disso, e paga o custo de reconstruir a página inteira do zero mesmo assim.

Intercepta, busca, troca

A solução foi um roteador client-side minimalista: ele intercepta cliques em links internos de mesma origem, busca o HTML da página de destino via fetch, e troca só um punhado fixo de regiões, link de pular pro conteúdo, cabeçalho, conteúdo principal e rodapé, em vez de substituir o documento inteiro. CSS, fontes e scripts já carregados continuam intactos; só o conteúdo que de fato mudou trafega pela rede.

Melhoria progressiva, não uma dependência

O ponto central é que cada rota continua existindo como uma página HTML real, buscável de forma independente, sem precisar de nenhum framework client-side pra renderizá-la. Se o fetch falhar, offline, um 404, ou se JavaScript estiver desligado, o roteador simplesmente cede lugar pra uma navegação normal via redirecionamento de página inteira, e o fallback offline do service worker continua valendo do mesmo jeito. O roteador é uma camada de melhoria em cima de um site que já funciona por completo sem ele, nunca um requisito pra ele funcionar.

Resultado

Navegar entre páginas passa a sensação de instantâneo, porque só o conteúdo que realmente mudou é buscado e renderizado, e, ao mesmo tempo, cada página continua sendo rastreável, linkável e totalmente funcional com JavaScript desligado, sem precisar de um framework client-side nem de um passo de hidratação pra isso acontecer.