我刚读完Promises / A+规范,偶然发现了术语microtask和macrotask:
我以前从未听说过这些术语,现在我很好奇可能会有什么不同?
鉴于此WHATWG规范,我知道理论上我应该能够自己提取差异。但是我确信,专家的简短解释也可以使其他人受益。
事件循环的 一种解决 方法是从 宏任务队列中 恰好 处理 一个 任务在WHATWG规范中,该队列简称为 任务队列 )。此宏任务完成后,将处理所有可用的 微 任务,即在相同的复现周期内。在处理这些微任务时,它们可以将更多的微任务排队,这些任务将一一运行,直到用完微任务队列。
如果 微任务 递归地排队其他微任务,则可能需要很长时间才能处理下一个宏任务。这意味着,您最终可能会遇到UI阻塞或应用程序中某些I / O空闲的情况。
然而,至少有关的Node.js的process.nextTick函数(队列 microtasks ),存在通过process.maxTickDepth的手段对这种阻挡一个内置的保护。此值的默认设置为1000,在达到此限制后将减少对 微 任务的 进一步处理,从而允许处理下一个 宏任务 )
基本上,当您需要以同步方式异步执行 事务 时(例如,您说要 在最近期执行此(微)任务),请使用微任务 。否则,请坚持 宏任务 。