30 lines
		
	
	
		
			756 B
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			756 B
		
	
	
	
		
			JavaScript
		
	
	
	
// 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;
 |