宏任务和微任务区别

136 阅读1分钟

宏任务和微任务区别

宏任务

常见的宏任务:

  • 渲染事件(如解析 DOM、样式、布局、绘制)
  • DOM事件(例如点击事件、键盘事件、鼠标事件等)
  • JS定时器
  • 网络请求完成等。

微任务

在浏览器里,微任务产生的方式有两种:

  • Promise中调用resolve() 和 reject() 会产生微任务,并将对应的任务按照顺序添加到当前宏任务的微任务队列上
  • 使用 MutationObserver API 观察 DOM 变化时,其回调也会被添加到微任务队列中。

区别

宏任务和微任务本质上就是异步回调,但是各自执行时机不同。

  • 宏任务:是添加到消息队列,当事件循环到这个任务的时候就会执行回调
  • 微任务是添加到微任务队列,是在主函数执行结束之后,当前宏任务结束之前执行回调
  • 微任务比宏任务的执行时间要早
  • 宏任务是由宿主(浏览器、Node)发起的,而微任务由 JS 自身发起。