// 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; } } function scheduleIdleTask(task) { taskQueue.push(task); if (!runningRequestIdleCallback) { runningRequestIdleCallback = true; requestIdleCallback(runTasks); } } export default scheduleIdleTask;