// Wrapper to call requestIdleCallback() to schedule low-priority work. // See https://developer.mozilla.org/en-US/docs/Web/API/Background_Tasks_API // for a good breakdown of the concepts behind this. import Queue from 'tiny-queue' const taskQueue = new Queue() let runningRequestIdleCallback = false function runTasks (deadline) { while (taskQueue.length && deadline.timeRemaining() > 0) { taskQueue.shift()() } if (taskQueue.length) { requestIdleCallback(runTasks) } else { runningRequestIdleCallback = false } } export function scheduleIdleTask (task) { taskQueue.push(task) if (!runningRequestIdleCallback) { runningRequestIdleCallback = true requestIdleCallback(runTasks) } }