Blog
Performance
18 de fevereiro de 20268 min

-80% de egress do Supabase graças a um cache inteligente

Acordei assustado ao olhar meu painel do Supabase. O egress estava subindo muito mais rápido do que o número de usuários. Cada abertura do aplicativo disparava dezenas de requisições.

O diagnóstico: N+1 e dados inalterados

Primeiro culpado: as ViewStats. 20 tarefas exibidas = 20 requisições individuais. Segundo culpado: dados recarregados integralmente a cada navegação, mesmo que nada tivesse mudado.

ContentCacheService

Cache de dois níveis: L1 (Mapa em memória, acesso instantâneo) e L2 (AsyncStorage, persiste após reinícios). O fluxo: L1 → L2 → Supabase → armazenar em L1 e L2.

Supabase Realtime

Dois canais (content-cache-tasks e content-cache-memos) que invalidam o cache quando os dados mudam. Os componentes React são renderizados novamente com os novos dados, sem requisições adicionais.

Batch ViewStats

getTaskViewStatsBatch(taskIds) recupera as estatísticas de 20 tarefas em uma única requisição, em vez de 20.

O impacto

O egress caiu de 80 a 90%. O bônus: o aplicativo está visivelmente mais rápido. O feed é exibido instantaneamente a partir do cache. Otimizar custos e otimizar a UX é frequentemente o mesmo trabalho.