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);
  }
}