微任务与宏任务的区别

一. 什么是宏任务(MacroTask)

宏任务包括:setTimeout setInterval Ajax DOM事件,
宏任务是由宿主(浏览器、Node)发起的,宏任务,可以理解为每次执行栈执行的代码就是一个宏任务(包括每次从事件队列中获取一个事件回调并放到执行栈中执行).进程的切换肯定是宏任务,因为需要花费大量的资源

二. 什么是微任务(MicroTask)

微任务包括:Promise async/await 等…
微任务是由JS引擎发起的,微任务,可以理解是在当前 task 执行结束后立即执行的任务。也就是说,在当前task任务后,下一个task之前,在渲染之前。线程的切换是微任务,因为只需要在同一个进程中切换就可以了

三. 宏任务和微任务是怎么执行的?

执行顺序:主线程 >主线程上创建的微任务 > 主线程上创建的宏任务
在事件循环中,每进行一次循环操作称为 tick,每一次 tick 的任务处理模型是比较复杂的,但关键步骤如下:

   1. 执行一个宏任务(栈中没有就从事件队列中获取)

   2. 执行过程中如果遇到微任务,就将它添加到微任务的任务队列中

   3. 宏任务执行完毕后,立即执行当前微任务队列中的所有微任务(依次执行)

   4. 当前宏任务执行完毕,开始检查渲染,然后GUI线程接管渲染

   5. 渲染完毕后,JS线程继续接管,开始下一个宏任务(从事件队列中获取)

原创作者: 吴小糖

创作时间:2024.3.13 

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吴吴吴呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值