perf(jobs): adaptive polling (2s with active jobs, 10s when idle)

This commit is contained in:
Geert Rademakes 2025-08-08 13:36:50 +02:00
parent 3f57904dd7
commit 6eabfdedd0

View File

@ -98,7 +98,7 @@ export const BackgroundJobProgress: React.FC<BackgroundJobProgressProps> = ({
clearInterval(intervalRef.current);
}
intervalRef.current = setInterval(async () => {
const tick = async () => {
try {
// Always reload job list to detect newly started jobs
const jobsData = await api.getAllJobs();
@ -116,13 +116,23 @@ export const BackgroundJobProgress: React.FC<BackgroundJobProgressProps> = ({
} catch (err) {
// ignore transient polling errors
}
}, 2000);
};
// Adaptive interval: 2s if active jobs, else 10s
const schedule = async () => {
await tick();
const hasActive = (jobs || []).some(j => j.status === 'running');
const delay = hasActive ? 2000 : 10000;
intervalRef.current = setTimeout(schedule, delay) as any;
};
schedule();
};
// Stop polling
const stopPolling = () => {
if (intervalRef.current) {
clearInterval(intervalRef.current);
clearTimeout(intervalRef.current as any);
intervalRef.current = null;
}
};