Nodejs 和浏览器的事件循环有哪些不同
· 阅读需 2 分钟
执行环境
Node.js 的执行环境是 V8 引擎,而浏览器是浏览器专门的运行环境
对于任务的分类方式
Node.js 中的宏任务和微任务的分类是根据阶段(Phase),这里的“阶段”指的是事件循环的不同阶段,也就是
- timers 阶段:处理
setTimeout()
和setInterval()
回调函数的执行; - I/O callbacks 阶段:处理网络 I/O、文件系统 I/O 等异步操作的回调函数的执行;
- idle, prepare 阶段:仅在内部使用;
- poll 阶段:处理除了
close
事件以外的事件,比如网络请求数据、用户输入、定时器等等; - check 阶段:处理
setImmediate()
回调函数的执行; - close callbacks 阶段:处理所有的
close
事件的回调函数的执行,比如socket.on('close', callback)
。
个阶段在执行完自己的任务之后,会检查微任务队列是否为空,如果不为空,会立即执行微任务队列中的所有任务。所以,在 Node.js 中,宏任务和微任务的分类是根据事件循环的不同阶段而来
执行顺序
Node.js 事件循环会先处理所有的微任务,再处理当前阶段的所有宏任务,浏览器中的事件循环是先处理一个宏任务,再处理所有微任务,然后再处理下一个宏任务
宏任务的种类不同
Node.js 中的宏任务包括 I/O 操作、定时器、setimmediate 等、而浏览器的宏任务包括 DOM 操作、网络请求等
以上就是二者的不同之处,喜欢的可以点个赞,有问题希望指出