宏任务 & 微任务

· 308 words · 2 min

页面上的大多数任务都是在主线程上执行的,这些在消息队列中的大多数任务都是宏任务。 宏任务的时间粒度比较大,执行的时间间隔不能够精确控制,不适合高实时性的需求。 因此引入了微任务的概念:微任务就是一个需要异步执行的函数,执行时机是在主函数执行结束之后,当前宏任务结束之前。

JS 执行一段脚本的时候,V8 会创建一个全局执行上下文,同时会在内部创建一个微任务队列,这个微任务队列无法通过 JS 直接访问。

执行时机

通常情况下,当前宏任务的 JS 快执行完时,即 JS 引擎准备退出全局执行上下文并清空调用栈时, 引擎会检查全局执行上下文中的微任务队列,然后按顺序执行队列中的微任务。 如果在执行微任务的过程中,产生了新的微任务,同样会把新的微任务添加到当前队列的末尾,而不会推迟到下个宏任务中去执行。

From 极客时间