exo
exo copied to clipboard
resolve issue #1025
Motivation
https://github.com/exo-explore/exo/issues/1025
Changes
- Add JSON comparison in AppStore before state updates - only triggers Svelte reactivity when data actually changes
- Add visibility-based polling - skips fetches when browser tab is hidden
- Reduce poll interval from 1s to 2s
- Add hash-based render check in TopologyGraph to prevent unnecessary D3 re-renders
- Add will-change CSS hints and prefers-reduced-motion support
- Pause all CSS animations when page is hidden
Why It Works
The root cause was Svelte reactivity triggering full re-renders on every 1s poll, even when data hadn't changed. By comparing JSON before state assignment, Svelte's reactivity system is only triggered when something actually changed. The TopologyGraph hash check provides an additional guard against unnecessary D3 SVG redraws.
Test Plan
Manual Testing
Hardware: MacBook Pro
- Tested with fake nodes only, some more testing with real nodes would be nice @AlexCheema :)
Automated Testing
N/A