跳到主要内容

Nodejs 和浏览器的事件循环有哪些不同

· 阅读需 2 分钟
素明诚
Full stack development

执行环境

Node.js 的执行环境是 V8 引擎,而浏览器是浏览器专门的运行环境

对于任务的分类方式

Node.js 中的宏任务和微任务的分类是根据阶段(Phase),这里的“阶段”指的是事件循环的不同阶段,也就是

  1. timers 阶段:处理 setTimeout()setInterval() 回调函数的执行;
  2. I/O callbacks 阶段:处理网络 I/O、文件系统 I/O 等异步操作的回调函数的执行;
  3. idle, prepare 阶段:仅在内部使用;
  4. poll 阶段:处理除了 close 事件以外的事件,比如网络请求数据、用户输入、定时器等等;
  5. check 阶段:处理 setImmediate() 回调函数的执行;
  6. close callbacks 阶段:处理所有的 close 事件的回调函数的执行,比如 socket.on('close', callback)

个阶段在执行完自己的任务之后,会检查微任务队列是否为空,如果不为空,会立即执行微任务队列中的所有任务。所以,在 Node.js 中,宏任务和微任务的分类是根据事件循环的不同阶段而来

执行顺序

Node.js 事件循环会先处理所有的微任务,再处理当前阶段的所有宏任务,浏览器中的事件循环是先处理一个宏任务,再处理所有微任务,然后再处理下一个宏任务

宏任务的种类不同

Node.js 中的宏任务包括 I/O 操作、定时器、setimmediate 等、而浏览器的宏任务包括 DOM 操作、网络请求等

以上就是二者的不同之处,喜欢的可以点个赞,有问题希望指出