校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > js语言和框架 > 基础语法
题目

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

解答

浏览器:

关于微任务和宏任务在浏览器的执行顺序是这样的:

    执行一个task(宏任务)

    执行完micro-task(微任务)

如此循环往复下去

浏览器的 task(宏任务)执行顺序在 html#event-loops 里面有讲就不翻译了常见的 task(宏任务) 比如:setTimeout、setInterval、script(整体代码)、 I/O 操作、UI 渲染等。常见的 micro-task 比如: new Promise().then(回调)、MutationObserver(html5新特性) 等。


Node:

Node的事件循环是libuv实现的,引用一张官网的图:

大体的task(宏任务)执行顺序是这样的:

    timer定时器:本阶段执行已经安排的setTimeout()和setInterval() 的回调函数。

    pending callbacks待定回调:执行延迟到下一个循环迭代的 I/O 回调。

    idle, prepare:仅系统内部使用。

    poll 轮询:检索新的 I/O 事件;执行与 I/O 相关的回调(几乎所有情况下,除了关闭的回调函数,它们由计时器和 setImmediate() 排定的之外),其余情况 node 将在此处阻塞。

    check 检测:setImmediate() 回调函数在这里执行。

    close callbacks 关闭的回调函数:一些准备关闭的回调函数,如:socket.on('close', ...)。

 微任务和宏任务在Node的执行顺序

 Node10以前:

    执行完一个阶段的所有任务

    执行完nextTick队列里面的内容

    然后执行完微任务队列的内容

Node 11以后: 和浏览器的行为统一了,都是每执行一个宏任务就执行完微任务队列。

C 1条回复 评论
天宫

分浏览器环境和Node环境讨论,Node环境下的任务类型较复杂

发表于 2020-11-15 08:55:25
0 0