JSFiddle - React, Tailwind, and code Playground
by Alexander
CSS
/*
https://learn.javascript.ru/setimmediate
http://prgssr.ru/development/kak-organizovat-vypolnenie-fonovyh-zadach-v-javascript.html
https://developers.google.com/web/updates/2015/08/using-requestidlecallback
*/
JavaScript
console.clear();
const fib = n => n <= 1 ? n : fib(n-1) + fib(n-2);
let task = [];
for (let i=0;i<2000;i++)
task.push(Function('', `console.log("tasks runned")`));
addTask(task);
function addTask(tasks) {
if ('requestIdleCallback' in window) {
let backgroundTask = deadline => {
while (deadline.timeRemaining() > 0 && 0 < task.length)
tasks.shift()();
if (tasks.length > 0) {
console.warn(`Tasks count: ${tasks.length}`);
requestIdleCallback(backgroundTask);
}
};
requestIdleCallback(backgroundTask);
}
else if (window.setImmediate) {
let c = tasks.length;
while (c --> 0)
setImmediate(tasks.shift());
}
else {
while (tasks.length)
setTimeout(task.shift(), 1);
}
}