~cytrogen/masto-fe

ref: ceb365c41950283f601058e38e779565eca43b31 masto-fe/app/javascript/mastodon/features/ui/util/schedule_idle_task.js -rw-r--r-- 756 bytes
ceb365c4 — Claire Fix boosts of local users being filtered in account timelines (#27204) 2 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 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;