Blog
Performance
18 février 20268 min

-80% d'egress Supabase grâce à un cache intelligent

Réveil brutal en regardant mon dashboard Supabase. L'egress grimpait bien plus vite que mon nombre d'utilisateurs. Chaque ouverture de l'app déclenchait des dizaines de requêtes.

Le diagnostic : N+1 et données inchangées

Premier coupable : les ViewStats. 20 tâches affichées = 20 requêtes individuelles. Deuxième coupable : des données rechargées intégralement à chaque navigation, même si rien n'avait changé.

ContentCacheService

Cache à deux niveaux : L1 (Map en mémoire, accès instantané) et L2 (AsyncStorage, persiste aux redémarrages). Le flow : L1 → L2 → Supabase → stocker en L1 et L2.

Supabase Realtime

Deux channels (content-cache-tasks et content-cache-memos) qui invalidient le cache quand les données changent. Les composants React se re-rendent avec les nouvelles données, sans requête supplémentaire.

Batch ViewStats

getTaskViewStatsBatch(taskIds) récupère les stats de 20 tâches en une seule requête au lieu de 20.

L'impact

L'egress a chuté de 80 à 90%. Le bonus : l'app est perceptiblement plus rapide. Le feed s'affiche instantanément depuis le cache. Optimiser les coûts et optimiser l'UX, c'est souvent le même travail.