Files
Froidefond Julien 2d266f89f9 feat(perf): implement performance optimizations for session handling
- 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.
2026-03-10 08:06:47 +01:00

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.ts pour grouper les événements SSE simultanés
  • Appel de cleanupOldEvents : intégrer l'appel à cleanupOldEvents dans createEvent pour purger les vieux événements au fil de l'eau
  • Ajout de loading.tsx : ajouter des fichiers loading.tsx sur les routes /sessions, /weather, /users pour activer le streaming App Router
  • Lazy-load des modals : utiliser next/dynamic sur ShareModal et autres modals lourds pour réduire le bundle JS initial

Capabilities

New Capabilities

  • perf-loading-states: Feedback visuel de chargement sur les routes principales via loading.tsx

Modified Capabilities

  • Aucune modification de spec existante — les changements sont purement implémentation/performance

Impact

  • src/services/session-queries.ts — refactoring batch resolveCollaborator
  • src/hooks/useLive.ts — ajout debounce sur router.refresh
  • src/services/session-share-events.ts — appel cleanupOldEvents dans createEvent
  • src/app/sessions/loading.tsx, src/app/weather/loading.tsx, src/app/users/loading.tsx — nouveaux fichiers
  • Composants qui importent ShareModal — passage à import dynamique