В чем разница между Event Loop в браузере и через Node.js

«В чем разница между Event Loop в браузере и через Node.js» — вопрос из категории Асинхронность, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Event Loop в браузере и Node.js имеют схожую концепцию, но различаются в деталях реализации:

  1. Браузер:

    • Использует один главный поток (UI thread) для рендеринга и выполнения JS.
    • Имеет микротаски (Promises, MutationObserver) и макротаски (setTimeout, события UI).
    • Разные API для работы с асинхронностью: XHR, Fetch, DOM Events.
  2. Node.js:

    • Использует libuv для обработки асинхронных операций.
    • Имеет дополнительные фазы: timers, I/O callbacks, idle/prepare, poll, check, close callbacks.
    • Поддерживает worker threads для параллельного выполнения.

Пример для Node.js:

setTimeout(() => console.log('timer'), 0);
setImmediate(() => console.log('immediate'));
// Порядок вывода не гарантирован!

В браузере микротаски выполняются между макротасками, а в Node.js - в конце каждой фазы Event Loop.