И queueMicrotask(), и setTimeout(fn, 0) планируют асинхронное выполнение кода, но они существенно отличаются по приоритету выполнения в event loop JavaScript.
queueMicrotask(() => console.log("microtask"));
0, выполняется после всех ожидающих микротасков и возможного рендерингаsetTimeout(() => console.log("macrotask"), 0);
setTimeout(() => console.log("1 - macrotask"), 0);
queueMicrotask(() => console.log("2 - microtask"));
console.log("3 - synchronous");
// Вывод:
// 3 - synchronous
// 2 - microtask
// 1 - macrotask
queueMicrotask() для высокоприоритетной, лёгкой отложенной работы; используй setTimeout, когда небольшая задержка или более низкий приоритет вполне приемлемыРекурсивное планирование слишком большого количества микротасков может заблокировать рендеринг и снизить производительность, поскольку очередь микротасков должна полностью опустошиться, прежде чем браузер сможет отрисовать кадр.
Микротаск-очередь должна быть полностью опустошена, прежде чем event loop сможет обработать следующий макротаск или запустить цикл рендеринга.
Новый — ещё не проверен сообществом
Вы