Event loop в Node.js следует структурированному многофазному конвейеру, тогда как event loop браузера использует более простую модель с двумя очередями. Понимание этих различий критически важно для предсказания порядка выполнения асинхронного кода.
Node.js обрабатывает колбэки через шесть последовательных фаз:
setTimeout и setIntervalsetImmediatesocket.on('close')Каждая фаза поддерживает собственную выделенную очередь, и loop должен полностью опустошить эту очередь перед переходом к следующей фазе.
Модель браузера сравнительно проста и опирается на две очереди:
setTimeout, события UI и сетевые колбэкиPromise и MutationObserverПосле каждого macrotask-а браузер полностью опустошает очередь микротасков перед рендерингом или выбором следующей задачи.
Порядок приоритета в Node.js (выше → ниже):
1. process.nextTick()
2. Promise microtasks
3. setImmediate() (check фаза)
4. setTimeout() / setInterval()
Критическое отличие — process.nextTick(), который запускается перед любыми микротасками — такого поведения не существует в браузере. Это означает:
process.nextTick() осторожно: при злоупотреблении он может заморозить event loopsetImmediate() уникален для Node.js и всегда выполняется после I/O колбэковВ Node.js колбэки process.nextTick() выполняются до микротасков, таких как колбэки Promise, тогда как браузерный event loop не различает эти приоритеты.
Новый — ещё не проверен сообществом
Вы