Skip to content

事件循环:task、microtask、渲染机会与异步时序

主题边界

  • 事件循环是宿主环境协调同步栈、任务队列、微任务队列和渲染机会的调度模型。
  • 理解它必须区分语言层 Promise job、浏览器 task source 和渲染时机。

机制与流程

  • 主线程执行一个 task 后,会清空当前 microtask queue,然后宿主再决定是否渲染、输入处理或取下一个 task。
  • Promise.then、MutationObserver、queueMicrotask 属于微任务;setTimeout、I/O 回调、用户交互事件通常作为 task 进入队列。
  • 渲染不会在任意时刻发生,而依赖浏览器在事件循环中的 render opportunity。

关键差异

  • “宏任务/微任务”是流行说法,规范语境更精确的是 task 与 microtask。
  • Node.js 与浏览器的事件循环模型相似但不完全相同,尤其在 nextTick 和阶段划分上。

边界条件

  • 网络请求本身不属于微任务;请求完成后的回调进入何种队列,取决于宿主调度设计。
  • 无限递归塞入微任务会饿死渲染和后续 task。

工程落点

  • 很多框架调度策略,如 Vue 的 nextTick,都借助微任务或宏任务边界控制更新时机。
  • 排查异步竞态时,必须明确回调属于哪个队列、在哪个事件循环片段发生。

相关主题