eventLoop 事件循环
Posted bearbear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了eventLoop 事件循环相关的知识,希望对你有一定的参考价值。
js是单线程脚本语言,开发中了解代码执行顺序就显得格外重要,代码从上往下执行过程中 如果所有都是同步任务,将会造成严重的性能问题。
异步分为宏任务和微任务
宏任务(MacroTask)
script
全部代码、setTimeout
、setInterval
、setImmediate
(浏览器暂时不支持,只有IE10支持,具体可见MDN
)、I/O
、UI Rendering
。
微任务(MicroTask)
Process.nextTick(Node独有)
、Promise
、Object.observe(废弃)
、MutationObserver
(具体使用方式查看这里)
js中有一个主线程和执行栈,所有任务都会被放到调用栈等待主线程执行
浏览器将获取到的html 从上到下执行过程中 遇到script后,第一个宏异步任务就开始了,script从上到下执行所包含的js代码,会将同步任务按照先后顺序放入执行栈中等待主线程依次执行,当程序出现微异步任务时,会将微异步任务放入微任务队列中,出现宏任务会将宏任务放入宏任务队列中。
当执行栈同步任务执行完成后,调用栈被清空,这时会去检测微任务队列是否为空,如果不为空,会按照先入先出的规则,执行完所有微任务可以执行的微任务。
如果微任务队列为空,会去执行宏任务,每单个宏任务执行完毕,都回去检测微任务队列是否为空,不为空的话,会按照先入先出规则去执行所有可以执行的微任务。然后在执行宏任务。如此循环
主栈程每次将执行栈中任务执行完成后,就去检查事件队列中有无可执行事件,如果有,将事件推入执行栈执行。如此往复的过程就叫做"事件循环"
以上是关于eventLoop 事件循环的主要内容,如果未能解决你的问题,请参考以下文章