title: eventLoop
date: 2018-07-23 11:18:46
tags: 事件循环 event loop
categories: web
微任务(microtask)称为 jobs 。包括 process.nextTick ,promise ,Object.observe ,MutationObserver
宏任务(macrotask)称为 task 。包括 script , setTimeout ,setInterval ,setImmediate ,I/O ,UI rendering
Event loop 执行顺序
- 执行同步代码,这属于宏任务
- 执行栈为空,查询是否有微任务需要执行
- 执行所有微任务
- 必要的话渲染
UI - 然后开始下一轮
Event loop,执行宏任务中的异步代码
很多人有个误区,认为微任务快于宏任务,其实是错误的。因为宏任务中包括了 script ,浏览器会先执行一个宏任务,接下来有异步代码的话就先执行微任务。
通过上述的 Event loop 顺序可知,如果宏任务中的异步代码有大量的计算并且需要操作 DOM 的话,为了更快的界面响应,我们可以把操作 DOM 放入微任务中。