Skip to content
快看这页儿写了啥...

微任务、宏任务的区分是为了做什么? 优先级?

题干

  • 微任务、宏任务的区分

  • 微任务、宏任务的优先级

题解

微任务和宏任务的区分主要是为了控制代码的执行顺序和避免阻塞主线程。

由于 JS 是单线程的,意味着在同一时间只能执行一个任务。如果所有任务都是同步执行的,那么一旦遇到耗时的操作,比如网络请求或大量计算,就会导致主线程被阻塞,页面无法响应用户的交互,造成页面卡顿甚至崩溃。

为了解决这个问题,JS 引入了异步编程的概念,将一些耗时的操作交给其他线程或任务队列处理,然后通过回调函数或事件触发机制来处理异步操作的结果。微任务和宏任务就是用来管理和调度这些异步任务的机制。

微任务具有高优先级,会在下一个事件循环迭代之前执行完毕。这意味着微任务可以快速地执行,并且可以在同一事件循环中处理一系列的微任务,以保持页面的响应性。常见的微任务包括 Promise 的回调和 MutationObserver 的回调。

宏任务则需要等待主线程空闲时执行,它们的执行时间相对较长。宏任务包括一些耗时的操作,比如定时器(setTimeoutsetInterval)、I/O 操作和 DOM 事件等。宏任务的执行会在微任务之后进行,每个宏任务之间会有一段间隔,以允许主线程处理其他任务和响应用户交互。

通过区分微任务和宏任务,可以合理地安排任务的执行顺序,保持页面的流畅性和响应性。优先级上,微任务的执行优先级高于宏任务,这意味着在同一个事件循环中,会先执行完所有的微任务,然后再执行下一个宏任务。这样可以确保微任务的及时执行,避免长时间阻塞主线程。

总结起来,微任务和宏任务的区分是为了优化异步编程,控制代码执行顺序,提高页面的响应性,并避免长时间阻塞主线程。

注意:清空微任务之后才会渲染,然后执行下一个宏任务,所以微任务优先级相对高。只是优先级,并不代表微任务先于宏任务执行。

相关

什么是微任务、宏任务?

阐述 JS 事件循环 EventLoop?

贡献者

isboyjc's avatar isboyjc

浏览量(PV)  次  ·  独立访客(UV)  人次
不正经的前端 | 八股 · 欢迎 star ⭐