微任务和宏任务是指在 JavaScript 中执行异步任务的两种不同的队列。
宏任务
宏任务: 宏任务是指由浏览器发起的、在事件循环中执行的异步任务。常见的宏任务包括:
- setTimeout
- setInterval
- I/O 操作
- UI 渲染
宏任务的执行顺序是在每一轮事件循环结束时执行,在下一轮事件循环开始前执行。
微任务
微任务是指由 JavaScript 引擎发起、在当前宏任务执行结束后立即执行的异步任务。常见的微任务包括:
微任务会在当前宏任务执行完毕后、下一个宏任务执行之前执行。
在事件循环中,每轮循环分为以下几个阶段:
- 执行栈: 执行同步任务,将宏任务加入宏任务队列。
- 消息队列检查: 将消息队列中的宏任务添加到执行栈,准备执行。
- 微任务队列: 执行微任务队列中的所有任务。
- 渲染: 更新页面渲染。
- 宏任务执行: 执行宏任务队列中的一个任务,重复上述过程。
关于微任务和宏任务的执行顺序:
- 每次执行栈为空时,会先执行微任务队列中的所有任务。
- 微任务执行完毕后,会检查是否有渲染工作,执行渲染。
- 渲染完成后,执行宏任务队列中的一个任务,然后重复上述步骤。
总体来说,微任务的优先级高于宏任务,微任务会在宏任务之前执行。这意味着微任务中的任务会优先于下一个宏任务执行,保证了相对较快的执行速度。