# Requirements: v1.7 Performance Optimization **Defined:** 2026-03-03 **Core Value:** Eliminate page freezes by reducing unnecessary React re-renders ## v1.7 Requirements Requirements for optimizing render performance in session screen components. ### VU Meter Optimization - [x] **VU-01**: VU meter updates use requestAnimationFrame batching instead of immediate state updates ✓ - [x] **VU-02**: VU meter components use refs for direct DOM updates (bypass React reconciliation) ✓ - [x] **VU-03**: VU data stored in external store (useSyncExternalStore pattern) ✓ ### Context Optimization - [x] **CTX-01**: MixersContext value is memoized to prevent unnecessary re-renders ✓ - [x] **CTX-02**: Split MixersContext into separate VuContext and MixerConfigContext ✓ - [x] **CTX-03**: Context consumers only subscribe to data they actually use ✓ ### Component Memoization - [x] **MEMO-01**: JKSessionAudioInputs wrapped with React.memo ✓ - [x] **MEMO-02**: JKSessionRemoteTracks wrapped with React.memo ✓ - [x] **MEMO-03**: SessionTrackVU wrapped with React.memo (if not using refs) ✓ - [x] **MEMO-04**: SessionTrackGain wrapped with React.memo ✓ ### Selector Optimization - [x] **SEL-01**: Consolidate 18+ individual selectors in useMixerHelper into composed selectors ✓ - [x] **SEL-02**: Use createSelector for memoized derived data ✓ - [x] **SEL-03**: Apply shallowEqual comparison for object selectors ✓ ### State Update Optimization - [ ] **STATE-01**: Consolidate triple track sync calls into single debounced call - [ ] **STATE-02**: Fix debounce instance recreation in useSessionModel.trackChanges - [ ] **STATE-03**: Prevent array recreation in mixer categorization when content is identical ### State Colocation - [ ] **COLOC-01**: Move resyncLoading state from JKSessionScreen to ResyncButton component - [ ] **COLOC-02**: Move videoLoading state from JKSessionScreen to VideoButton component - [ ] **COLOC-03**: Audit other local states that can be moved to child components ## Decisions | Decision | Rationale | |----------|-----------| | External VU store over Redux | VU updates at 50-70/sec would overwhelm Redux; external store bypasses React reconciliation | | Context splitting | Separates high-frequency (VU) from low-frequency (config) updates | | React.memo over PureComponent | Functional components are standard in codebase; memo provides same benefits | | requestAnimationFrame batching | Limits updates to 60fps max, matches display refresh rate | ## Out of Scope | Feature | Reason | |---------|--------| | Virtualization for track lists | Only beneficial with 10+ participants; complexity not justified for typical sessions | | Web Workers for VU processing | Overkill; RAF batching should be sufficient | | Complete state management rewrite | Too risky; incremental optimization preferred | ## Traceability | Requirement | Phase | Status | |-------------|-------|--------| | VU-01 | Phase 28 | Complete | | VU-02 | Phase 28 | Complete | | VU-03 | Phase 28 | Complete | | CTX-01 | Phase 29 | Complete | | CTX-02 | Phase 29 | Complete | | CTX-03 | Phase 29 | Complete | | MEMO-01 | Phase 30 | Complete | | MEMO-02 | Phase 30 | Complete | | MEMO-03 | Phase 30 | Complete | | MEMO-04 | Phase 30 | Complete | | SEL-01 | Phase 31 | Complete | | SEL-02 | Phase 31 | Complete | | SEL-03 | Phase 31 | Complete | | STATE-01 | Phase 32 | Pending | | STATE-02 | Phase 32 | Pending | | STATE-03 | Phase 32 | Pending | | COLOC-01 | Phase 32 | Pending | | COLOC-02 | Phase 32 | Pending | | COLOC-03 | Phase 32 | Pending | **Coverage:** - v1.7 requirements: 19 total - Mapped to phases: 19 - Complete: 13 - Unmapped: 0 ✓ --- *Requirements defined: 2026-03-03*