- Introduced a new configuration file `config.yaml` for specifying project context and artifact rules. - Added `.openspec.yaml` files for tracking changes related to performance improvements. - Created design documents outlining the context, goals, decisions, and migration plans for optimizing session performance. - Proposed changes include batching database queries, debouncing event refreshes, purging old events, and implementing loading states for better user experience. - Added tasks and specifications to ensure proper implementation and validation of the new features. These enhancements aim to improve the scalability and responsiveness of the application during collaborative sessions.
1.7 KiB
1.7 KiB
Why
La couche temps-réel actuelle (SSE + polling DB à 1s) multiplie les connexions et les requêtes dès que plusieurs utilisateurs collaborent. Chaque onglet ouvert sur une session déclenche son propre polling, et les Server Actions invalident des segments de route entiers avec revalidatePath. Ces problèmes de scalabilité deviennent visibles dès 5-10 utilisateurs simultanés.
What Changes
- Polling SSE partagé : un seul interval actif par session côté serveur, partagé entre tous les clients connectés à cette session
- Broadcast unifié : généraliser le pattern de broadcast in-process (déjà présent dans
weather) à tous les workshops via un modulesrc/lib/broadcast.ts revalidateTaggranulaire : remplacerrevalidatePathdans tous les Server Actions par des tags ciblés (session:<id>,sessions-list, etc.)- Pagination sessions page : limiter le chargement initial à N sessions par type avec pagination ou chargement progressif
Capabilities
New Capabilities
sse-shared-polling: Polling SSE mutualisé par session (un seul interval par session active)unified-broadcast: Module de broadcast in-process réutilisable par tous les workshops
Modified Capabilities
sessions-list: Ajout de pagination/limite sur le chargement des sessions
Impact
src/app/api/*/subscribe/route.ts— refactoring du polling vers le module broadcast partagésrc/lib/broadcast.ts— nouveau module (Map de sessions actives + subscribers)src/actions/*.ts— remplacement derevalidatePathparrevalidateTag+unstable_cachesrc/app/sessions/page.tsx— ajout paginationsrc/services/— ajout decachetags sur les requêtes Prisma fréquentes