perf(ui): calm large-queue live updates

Throttle visible download snapshots at 500 ms from 250 queue items, align speed visualizations to the same cadence, preserve small-queue responsiveness, and retain the stronger protection for very large queues.
This commit is contained in:
Sucukdeluxe
2026-08-17 13:39:53 +02:00
parent a8a5ca4b40
commit fe3cb36731
7 changed files with 32 additions and 24 deletions
+3 -3
View File
@@ -880,7 +880,7 @@ const historyRetentionLabels: Record<RendererSettings["historyRetentionMode"], s
const AUTO_RENDER_PACKAGE_LIMIT = 260;
export function getSnapshotRenderDelay(itemCount: number, running: boolean, activeTab: MainView): number {
let delay = itemCount >= 700 ? 0 : itemCount >= 250 ? 50 : 100;
let delay = itemCount >= 250 ? 0 : 100;
if (!running) delay = Math.min(delay, 200);
if (activeTab !== "downloads") delay = Math.max(delay, 800);
return delay;
@@ -1272,7 +1272,7 @@ const BandwidthChart = memo(function BandwidthChart({ running, paused, speedHist
const reducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
const interval = setInterval(() => {
drawChart();
}, reducedMotion ? 1000 : 250);
}, reducedMotion ? 1000 : 500);
return () => clearInterval(interval);
}, [drawChart, running, paused]);
@@ -1374,7 +1374,7 @@ const DownloadSpeedSparkline = memo(function DownloadSpeedSparkline({ speedBps,
draw();
};
const id = window.setInterval(tick, 250);
const id = window.setInterval(tick, 500);
return () => window.clearInterval(id);
}, []);