Appearance
事件循环: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,都借助微任务或宏任务边界控制更新时机。
- 排查异步竞态时,必须明确回调属于哪个队列、在哪个事件循环片段发生。