2021-03-02 12:58:03 +00:00
|
|
|
const LIMIT = 25000;
|
|
|
|
|
|
|
|
let taskCounter = 0;
|
2021-03-03 10:44:45 +00:00
|
|
|
let delayedTasks: Array<() => void> = [];
|
2021-03-02 12:58:03 +00:00
|
|
|
export function queueTask(f: () => void) {
|
|
|
|
taskCounter++;
|
|
|
|
if (taskCounter === LIMIT) {
|
2021-03-03 10:44:45 +00:00
|
|
|
setTimeout(() => {
|
|
|
|
taskCounter = 0;
|
|
|
|
delayedTasks.forEach(queueMicrotask);
|
|
|
|
delayedTasks = [];
|
|
|
|
}, 0);
|
2021-03-02 12:58:03 +00:00
|
|
|
}
|
|
|
|
if (taskCounter >= LIMIT) {
|
2021-03-03 10:44:45 +00:00
|
|
|
delayedTasks.push(f);
|
2021-03-02 12:58:03 +00:00
|
|
|
} else {
|
|
|
|
queueMicrotask(f);
|
|
|
|
}
|
|
|
|
}
|