Blog
Performance
18 febbraio 20268 min

-80% di egress Supabase grazie a una cache intelligente

Un brusco risveglio guardando la mia dashboard Supabase. L'egress stava salendo molto più velocemente del mio numero di utenti. Ogni apertura dell'app innescava decine di richieste.

La diagnosi: N+1 e dati invariati

Primo colpevole: le ViewStats. 20 attività visualizzate = 20 richieste individuali. Secondo colpevole: dati ricaricati completamente ad ogni navigazione, anche se nulla era cambiato.

ContentCacheService

Cache a due livelli: L1 (Map in memoria, accesso istantaneo) e L2 (AsyncStorage, persiste ai riavvii). Il flusso: L1 → L2 → Supabase → memorizzare in L1 e L2.

Supabase Realtime

Due canali (content-cache-tasks e content-cache-memos) che invalidano la cache quando i dati cambiano. I componenti React si ri-renderizzano con i nuovi dati, senza richieste aggiuntive.

Batch ViewStats

getTaskViewStatsBatch(taskIds) recupera le statistiche di 20 attività in una singola richiesta invece di 20.

L'impatto

L'egress è diminuito dell'80-90%. Il bonus: l'app è percettibilmente più veloce. Il feed viene visualizzato istantaneamente dalla cache. Ottimizzare i costi e ottimizzare l'UX è spesso lo stesso lavoro.