码迷,mamicode.com
首页 > 其他好文 > 详细

eventLoop 事件循环

时间:2020-07-03 15:13:44      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:roc   code   macro   ring   int   问题   mozilla   循环   完成   

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

异步分为宏任务和微任务

宏任务(MacroTask)

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

微任务(MicroTask)

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

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

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

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

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

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

eventLoop 事件循环

标签:roc   code   macro   ring   int   问题   mozilla   循环   完成   

原文地址:https://www.cnblogs.com/Bearbear/p/13230485.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!