微任务

  1. Promise callbacks: 包括.then, .catch, 和 .finally的回调函数。

  2. async/await: 当使用await关键字等待一个Promise时,后续的代码作为微任务执行。

  3. MutationObserver: 用于监视DOM树的变化,其回调函数作为微任务执行。

  4. queueMicrotask: 在某些环境中(如Node.js),这是一个直接将函数放入微任务队列的方法。

  5. process.nextTick(Node.js环境): 虽然不直接属于ES规范中的微任务,但它具有类似的行为,常用于Node.js中立即执行的回调。

宏任务

  1. setTimeout 和 setInterval: 用于延迟或周期性执行代码。

  2. setImmediate(Node.js环境): 提供了一个比setTimeout(0)更快的执行方式,用于在I/O循环的下一次迭代开始时执行。

  3. I/O: 如文件读写等操作通常作为宏任务调度。

  4. UI Rendering: 浏览器中的渲染任务,如对DOM的修改触发的重绘和回流。

  5. Event Loop Iteration: 每次事件循环的迭代本身也可以视为一个宏任务。

  6. requestAnimationFrame: 用于在下一次浏览器重绘之前执行回调,常用于动画和高性能UI更新。

  7. script: 整体的JavaScript脚本执行也是一个宏任务。