-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.