← 中文资源

简体中文版本

微任务队列

微任务队列在每个任务结束、渲染之前完整清空 promise 回调与 queueMicrotask 工作,提供不饿死渲染又严格有序的异步续延。

阅读英文原文

概念定义

微任务是被调度的执行单元——promise 反应、MutationObserver 回调、queueMicrotask 条目——在 JavaScript 栈清空时、事件循环进入渲染或下一个宏任务之前运行。队列会被彻底清空,微任务再入队的微任务也都在浏览器绘制前跑完。

工作机制

任务结束后栈展开,微任务检查点清空队列,随后循环才决定本迭代是否渲染。由于清空是穷尽式的,自我续喂的微任务链永不交还控制权:无绘制、无输入、无定时器——这是与忙碌宏任务循环不同的冻结指纹。

使用场景

顺序敏感的逻辑:绘制前冲刷状态批次、在原语之上实现调度器优先级、理解 MutationObserver 为何在当前脚本后触发。框架正是依赖“渲染前排空”特性,把多次变更合并为每帧一次 DOM 更新。

常见误区

微任务并不让渡给浏览器:无限链会冻结渲染与输入。await 不带定时器时调度的是微任务续延,与 setTimeout(fn, 0) 的顺序不可互换。把重活塞进微任务只是躲开长任务监控,阻塞照旧;应跨任务拆分大工作量。