- 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
Les routes principales souffrent de plusieurs problèmes de performance facilement corrigeables : N+1 sur resolveCollaborator, re-renders en cascade dans useLive, accumulation illimitée d'événements SSE, et absence de feedback visuel pendant les navigations. Ces quick wins peuvent être adressés indépendamment, sans refactoring architectural.
What Changes
- Batch resolveCollaborator : remplacer les appels séquentiels par un batch unique dans
session-queries.ts(élimination N+1) - Debounce router.refresh() : ajouter un debounce ~300ms dans
useLive.tspour grouper les événements SSE simultanés - Appel de cleanupOldEvents : intégrer l'appel à
cleanupOldEventsdanscreateEventpour purger les vieux événements au fil de l'eau - Ajout de
loading.tsx: ajouter des fichiersloading.tsxsur les routes/sessions,/weather,/userspour activer le streaming App Router - Lazy-load des modals : utiliser
next/dynamicsurShareModalet autres modals lourds pour réduire le bundle JS initial
Capabilities
New Capabilities
perf-loading-states: Feedback visuel de chargement sur les routes principales vialoading.tsx
Modified Capabilities
- Aucune modification de spec existante — les changements sont purement implémentation/performance
Impact
src/services/session-queries.ts— refactoring batch resolveCollaboratorsrc/hooks/useLive.ts— ajout debounce sur router.refreshsrc/services/session-share-events.ts— appel cleanupOldEvents dans createEventsrc/app/sessions/loading.tsx,src/app/weather/loading.tsx,src/app/users/loading.tsx— nouveaux fichiers- Composants qui importent
ShareModal— passage à import dynamique