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