任务(事件)队列和事件循环

Posted web半晨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了任务(事件)队列和事件循环相关的知识,希望对你有一定的参考价值。

目录


1、任务(事件)队列

JavaScript中有两类任务(事件)队列:宏任务队列(macro tasks)和微任务队列(micro tasks)。宏任务队列可以有多个,微任务队列只有一个。


1.1、宏仁务(macro tasks)

1. setTimeout
2. setInterval
3. script
4. I/O
5. UI 交互事件
6. postMessage
7. MessageChannel
8. setImmediate(Nodejs环境)


1.2、微任务(micro tasks)

1. Promise.then
2. Object.observe
3. MutaionObserve
4. process.nextTick(Node.js环境)


2、事件循环

事件循环(Event Loop)遵循的是html5的标准。当执行栈(stack)为空的时候,就会从任务队列中,取任务来执行。共3步:
1、取一个宏任务来执行。执行完毕后,下一步。
2、取一个微任务来执行,执行完毕后,再取一个微任务来执行。直到微任务队列为空,执行下一步。
3、更新UI渲染。
事件循环(Event Loop)会无限循环执行上面的3步,这就是事件循环(Event Loop)的主要控制逻辑。其中,第3步(更新UI渲染)会根据浏览器的逻辑,决定要不要马上执行更新。毕竟更新UI成本大,所以,一般都会比较长的时间间隔,执行一次更新。

以上是关于任务(事件)队列和事件循环的主要内容,如果未能解决你的问题,请参考以下文章

js事件循环 microtask macrotask

JS-线程事件循环任务队列

JS-线程事件循环任务队列

事件循环和任务队列

同步异步和Event loop事件循环

详解队列在前端的应用,深剖JS中的事件循环Eventloop,再了解微任务和宏任务