一尘不染

事件循环上下文中微任务和宏任务之间的区别

javascript

我刚读完Promises / A+规范,偶然发现了术语microtask和macrotask:

我以前从未听说过这些术语,现在我很好奇可能会有什么不同?

鉴于此WHATWG规范,我知道理论上我应该能够自己提取差异。但是我确信,专家的简短解释也可以使其他人受益。


阅读 491

收藏
2020-04-25

共1个答案

一尘不染

事件循环的 一种解决 方法是从 宏任务队列中 恰好 处理 一个
任务在WHATWG规范中,该队列简称为 任务队列 )。此宏任务完成后,将处理所有可用的
任务,即在相同的复现周期内。在处理这些微任务时,它们可以将更多的微任务排队,这些任务将一一运行,直到用完微任务队列。

这有什么实际后果?

如果 微任务 递归地排队其他微任务,则可能需要很长时间才能处理下一个宏任务。这意味着,您最终可能会遇到UI阻塞或应用程序中某些I / O空闲的情况。

然而,至少有关的Node.js的process.nextTick函数(队列 microtasks
),存在通过process.maxTickDepth的手段对这种阻挡一个内置的保护。此值的默认设置为1000,在达到此限制后将减少对
任务的 进一步处理,从而允许处理下一个 宏任务

那么什么时候使用什么呢?

基本上,当您需要以同步方式异步执行 事务 时(例如,您说要 在最近期执行此(微)任务),请使用微任务 。否则,请坚持 宏任务

2020-04-25