eventLoop 事件循环

Posted bearbear

tags:

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

js是单线程脚本语言,开发中了解代码执行顺序就显得格外重要,代码从上往下执行过程中 如果所有都是同步任务,将会造成严重的性能问题。

异步分为宏任务和微任务

宏任务(MacroTask)

script全部代码、setTimeoutsetIntervalsetImmediate(浏览器暂时不支持,只有IE10支持,具体可见MDN)、I/OUI Rendering

微任务(MicroTask)

Process.nextTick(Node独有)PromiseObject.observe(废弃)MutationObserver(具体使用方式查看这里

js中有一个主线程和执行栈,所有任务都会被放到调用栈等待主线程执行

浏览器将获取到的html 从上到下执行过程中 遇到script后,第一个宏异步任务就开始了,script从上到下执行所包含的js代码,会将同步任务按照先后顺序放入执行栈中等待主线程依次执行,当程序出现微异步任务时,会将微异步任务放入微任务队列中,出现宏任务会将宏任务放入宏任务队列中。

当执行栈同步任务执行完成后,调用栈被清空,这时会去检测微任务队列是否为空,如果不为空,会按照先入先出的规则,执行完所有微任务可以执行的微任务。

如果微任务队列为空,会去执行宏任务,每单个宏任务执行完毕,都回去检测微任务队列是否为空,不为空的话,会按照先入先出规则去执行所有可以执行的微任务。然后在执行宏任务。如此循环

主栈程每次将执行栈中任务执行完成后,就去检查事件队列中有无可执行事件,如果有,将事件推入执行栈执行。如此往复的过程就叫做"事件循环"

以上是关于eventLoop 事件循环的主要内容,如果未能解决你的问题,请参考以下文章

简述JavaScript事件循环EventLoop

缩略muduo库:事件循环 EventLoop

缩略muduo库:事件循环 EventLoop

前端中的事件循环eventloop机制

Asyncio之EventLoop笔记

JS | Event Loop 事件循环