浏览器和Node事件循环的区别

 我来答
聪慧且健美灬牡蛎5360
2022-06-02 · TA获得超过1525个赞
知道小有建树答主
回答量:1850
采纳率:100%
帮助的人:114万
展开全部

先看一个简单的事件循环笔试题:

在不同的环境中,输出的结果也是不同的:

接下来我们就看看浏览器和 Node 中时间循环的区别是什么。

浏览器环境下的 异步任务 分为 宏任务(macroTask) 微任务(microTask)

当满足执行条件时, 宏任务(macroTask) 微任务(microTask) 会各自被放入对应的队列: 宏队列(Macrotask Queue) 微队列(Microtask Queue) 中等待执行。

在 Node 环境中 任务类型 相对就比浏览器环境下要复杂一些:

因此,也就产生了执行事件循环相应的任务队列 Timers Queue I/O Queue Check Queue Close Queue

先执行 <script> 中的同步任务,然后所有微任务,一个宏任务,所有微任务,一个宏任务......

需要 注意 的是:

在进入第一次循环之前,会先进行如下操作:

循环中进行的操作:

可以看出, nextTick 优先级比 Promise 等 microTask 高, setTimeout 和 setInterval 优先级比 setImmediate 高。

在整个过程中,需要 注意 的是:

事件循环在 浏览器 Node 中的区别很容易被人忽视,执行顺序整理如下:

浏览器环境下:

Node 环境下:

个人觉得比较清晰了,有什么问题可以私信讨论。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式