我刚刚读完的承诺/ A +规格和偶然的条款microtask和宏任务:看http://promisesaplus.com/#notes
我从来没有听说过这些术语之前,现在我很好奇的差异可能是什么?
我已经试图找到在网络上的一些信息,但所有我发现是从w3.org档案这个帖子(不解释对我来说差别): http://lists.w3.org/Archives /Public/public-nextweb/2013Jul/0018.html
另外,我发现所谓的“宏任务”的NPM模块: https://www.npmjs.org/package/macrotask再次,它没有明确什么区别到底是。
我所知道的是,它有事情做与事件循环,如在https://html.spec.whatwg.org/multipage/webappapis.html#task-queue和HTTPS://html.spec.whatwg .ORG /多页/ webappapis.html#执行-A-microtask检查点
我知道我应该在理论上能够提取的区别自己,因为这WHATWG规范。 但我敢肯定,其他人可以从由专家给出一个简短的解释中受益。
事件循环的一个复飞必须从宏任务队列进行处理恰好有一个任务(这个队列简称在任务队列 WHATWG规范 )。 这个宏任务完成后,所有可用的microtasks将被处理,即在相同的复飞循环。 虽然这些microtasks进行处理,他们可以排队更microtasks,这都将运行一个接一个,直到microtask队列被耗尽。
这有什么实际后果?
如果microtask递归排队等microtasks,直到下一个宏任务处理可能需要很长的时间。 这意味着,你可以用堵塞UI结束,或完成一些I / O应用程序中的空转。
然而,至少有关的Node.js的process.nextTick功能(哪些队列microtasks),存在通过process.maxTickDepth的手段对这种阻挡一个内置的保护。 这个值被设置为1000默认情况下,削减microtasks的进一步处理达到此限制后,允许要处理的下一个宏任务 )
因此,当使用什么?
基本上,使用microtasks当你需要在同步异步方式做的东西(即当你会说在最近的将来执行这个(微)任务 )。 否则,坚持宏任务 。
例子
宏任务:的setTimeout,setInterval的,setImmediate,requestAnimationFrame,I / O,UI渲染
microtasks:process.nextTick,承诺,Object.observe,MutationObserver
我写这个帖子,其中包括互动的例子https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/
更新:我也给了谈这个https://www.youtube.com/watch?v=cCOL7MC4Pl0 。 会谈进入更多细节,包括任务和microtasks如何与渲染互动。