Blog
Performance
18. Februar 20268 min

-80% Supabase Egress dank intelligentem Cache

Ein böses Erwachen, als ich mein Supabase-Dashboard ansah. Der Egress stieg viel schneller als meine Nutzerzahl. Jedes Öffnen der App löste Dutzende von Anfragen aus.

Die Diagnose: N+1 und unveränderte Daten

Erster Übeltäter: die ViewStats. 20 angezeigte Aufgaben = 20 individuelle Anfragen. Zweiter Übeltäter: Daten wurden bei jeder Navigation vollständig neu geladen, selbst wenn sich nichts geändert hatte.

ContentCacheService

Zweistufiger Cache: L1 (Map im Speicher, sofortiger Zugriff) und L2 (AsyncStorage, bleibt nach Neustarts erhalten). Der Ablauf: L1 → L2 → Supabase → in L1 und L2 speichern.

Supabase Realtime

Zwei Channels (content-cache-tasks und content-cache-memos), die den Cache bei Datenänderungen invalidieren. Die React-Komponenten rendern sich mit den neuen Daten neu, ohne zusätzliche Anfrage.

Batch ViewStats

getTaskViewStatsBatch(taskIds) ruft die Statistiken von 20 Aufgaben in einer einzigen Anfrage ab, anstatt in 20.

Die Auswirkung

Der Egress ist um 80 bis 90 % gesunken. Der Bonus: Die App ist spürbar schneller. Der Feed wird sofort aus dem Cache angezeigt. Kostenoptimierung und UX-Optimierung sind oft dieselbe Arbeit.