事件循环分为两种,macro和micro。JS执行过程中会先执行同步任务,然后清空microtask队列,最后执行macrotask,如此反复。
eventloop其实是为了解决一些异步回调,I/O操作。假设不区分marco/micro,统一都在macro处理,那callback可能就会很晚才执行,造成逻辑错误或者渲染很慢。
micro在每一个macro前统一执行则很好的解决了这个问题,让回调尽早的执行。
node中事件循环的microtask执行时机与浏览器略不一样。浏览器是在每一个macro执行完统一清空micro的队列。而node中microtask会在多种阶段下执行。(这里说的并不是很完善,因为本身node用的也不熟了解很少)
啥是 event loop,有哪些macrotask 有哪些 microtask?
- 常见的macrotask有:setTimeout,setInterval,requestAnimationFrame,I/O,UI rendering
- 常见的microtask有:promise.then,MutationObserver