stamatios
← Voltar ao feed
Cronômetro mede bumerangue que volta instantaneamente à mão, métricas do back/forward cache do Sentry
Dev & Engenharia

Sentry torna mensurável a saúde do back/forward cache

resumo de ~3 min

O problema invisível do bfcache

O bfcache (back/forward cache) é o mecanismo pelo qual o navegador congela um snapshot completo da página - DOM, heap de JavaScript, posição de scroll - e o restaura instantaneamente em navegações de voltar/avançar, sem recarregar nada. Quando o cache falha, a página é reconstruída do zero, com refetches e re-renderizações.

Sentry argumenta que essa é uma das jornadas de navegação mais frequentes da web e domina fluxos com valor de negócio, como e-commerce (produto para listagem), busca, documentação e marketplaces. O benefício é maior para usuários em redes e dispositivos mais lentos. Segundo o post, "quão rápido é o botão Voltar" deveria ser uma pergunta de performance de primeira classe, às vezes maior que o carregamento de página nova.

Por que as ferramentas não enxergam

Toda ferramenta de performance, incluindo as do próprio Sentry, é construída em torno do ciclo de vida de carregamento da página. Um acerto do bfcache é indistinguível de "nada acontecendo" - o paradoxo é que quanto melhor o bfcache funciona, menos dados as ferramentas coletam.

Além disso, a elegibilidade do cache depende de heurísticas do navegador que mudam ao longo do tempo. Desqualificadores mundanos já incluíram listeners de unload, o header Cache-Control: no-store, conexões abertas ou bloqueios dentro de iframes - e qualquer um pode ser introduzido pelo próprio código ou por um script de terceiro sem que ninguém perceba. A elegibilidade pode regredir com ou sem mudanças de código, e o texto argumenta que testes e code review não são viáveis para combater isso; é preciso monitoramento ativo.

Como funciona a nova integração

A solução é a bfcacheMetricsIntegration, que modela os sinais do navegador (pageshow e a API notRestoredReasons) como três application metrics:

  • browser.bfcache.navigation: contador por navegação de voltar/avançar, com resultado hit ou miss e a contagem de razões de não restauração.
  • browser.bfcache.not_restored (apenas Chromium): contador por razão de não restauração, com a string bruta do navegador (ex.: unload-listener, websocket, response-cache-control-no-store) e a localização do bloqueador (top ou child).
  • browser.bfcache.reload.duration: distribuição em milissegundos do custo do reload de fallback quando há miss - a métrica de impacto, que mede o que o miss realmente custou ao usuário em vez de estimar quão rápido seria a restauração.

Juntas, as métricas respondem: a página restaurou? Por que não? Quanto o miss custou?

Uso e disponibilidade

A integração é opt-in e foi lançada nos JavaScript SDKs v11, ativada com uma linha no Sentry.init. Em vez de um dashboard pré-pronto, o time pode construir visualizações próprias com as métricas - o post mostra exemplos de prompts de criação agêntica de dashboards, como taxa de acerto geral ao longo do mês, rotas com mais misses e principais razões de bloqueio, globais ou por rota. Como são application metrics, cada "e se" é uma query, sem redeploy ou nova instrumentação.

Resultados de hit e miss funcionam nos navegadores modernos; as razões detalhadas de não restauração são por enquanto um aprimoramento exclusivo do Chromium, e a cobertura deve se ampliar conforme mais engines implementem a API notRestoredReasons. A Sentry também planeja estender a consciência de bfcache a recursos como os Core Web Vitals, que hoje não registram páginas restauradas porque nenhuma carga de página é disparada nesses casos.