feat(refboard): video budget system, lazy lifecycle, incremental sync fixes
Video memory: - Lazy <video> creation: constructor makes placeholder only, initVideo() creates element with preload='metadata' when near viewport - Tiered budgets: 1 playing / 6 initialized / 4 poster textures max - Aggressive teardown: offscreen videos lose <video> element, poster, and all textures — zero memory for offscreen videos - Poster textures dropped while playing (don't keep both resident) - Dimension caching in scene data (nativeW/nativeH) avoids re-init Server: - HTTP Range support (206 Partial Content) for video seeking - Proper end clamping and invalid range rejection (416) Sync: - Remove redundant broadcastSceneDebounced() from broadcastTransform() - Remove duplicate broadcastElements() from drag-end handler VideoControls: - Event-driven (timeupdate/play/pause/seeked) instead of rAF polling - Tracks actual HTMLVideoElement reference, rebinds on init/teardown - Seek uses ref-based commit on pointerUp, not conditional onChange
This commit is contained in:
@@ -138,8 +138,7 @@ export function useCanvasSetup(deps: CanvasSetupDeps) {
|
||||
syncRef.current?.broadcastTransform(item);
|
||||
};
|
||||
selection.transformBox.onDragEnd = (itemIds) => {
|
||||
syncRef.current?.broadcastElements(itemIds);
|
||||
onCanvasChange(itemIds);
|
||||
onCanvasChange(itemIds); // broadcasts elements + saves + undo
|
||||
};
|
||||
|
||||
socket.on('user:joined', (data: any) => {
|
||||
|
||||
Reference in New Issue
Block a user