Проверяет понимание очередей задач в JavaScript и порядка их выполнения в event loop.
JavaScript — однопоточный язык, но благодаря event loop он может обрабатывать асинхронные операции без блокировки. Когда выполняется асинхронный код, он попадает в одну из двух очередей: очередь macro задач или очередь micro задач. Понимание разницы между ними критично для предсказания порядка выполнения кода.
Macro задачи — это более крупные единицы работы, которые планируются через setTimeout, setInterval, setImmediate (в Node.js) или события DOM. Они выполняются по одной за цикл event loop. После выполнения каждой macro задачи браузер может обновить интерфейс, поэтому они менее приоритетны.
Micro задачи — это маленькие операции, которые должны выполниться как можно скорее после текущей синхронной работы. К ним относятся Promise.then/catch/finally, queueMicrotask, MutationObserver и async/await (который использует промисы). После завершения текущей macro задачи event loop сначала выполняет все micro задачи, прежде чем перейти к следующей macro задаче.
console.log('start');
setTimeout(() => console.log('macro'), 0);
Promise.resolve().then(() => console.log('micro'));
console.log('end');
// Вывод: start, end, micro, macroЗдесь сначала выполняется синхронный код, затем micro задача (промис), и только потом macro задача (setTimeout). Это происходит потому, что micro задачи имеют приоритет над macro задачами.
Знание этого механизма помогает избегать ошибок при работе с асинхронным кодом. Например, если нужно выполнить код после обновления DOM, лучше использовать micro задачи, так как они выполняются до следующего рендеринга. Для отложенных операций, таких как таймеры, подходят macro задачи.
Понимание разницы между macro и micro задачами необходимо для написания предсказуемого асинхронного кода. Используйте micro задачи для быстрых операций, которые должны выполниться сразу после текущего синхронного блока, и macro задачи для отложенных или повторяющихся действий. Это знание особенно важно при работе с промисами, async/await и оптимизацией производительности.