浏览器和Node.js在事件循环(Event Loop)的实现上存在一些区别。
浏览器的事件循环模型通常被称为浏览器的Event Loop,而Node.js的事件循环模型被称为Node.js的Event Loop。虽然它们的目标都是处理事件和异步操作,但由于运行环境的差异,它们在实现上有所不同。
以下是浏览器和Node.js事件循环的一些区别:
-
执行环境:浏览器的Event Loop运行在浏览器环境中,而Node.js的Event Loop运行在Node.js环境中。浏览器的Event Loop负责处理浏览器事件、用户交互和渲染等,而Node.js的Event Loop主要处理I/O操作和网络请求等。
-
Event Loop 事件循环的流程有一点区别:浏览器的Event Loop通常在每次完成宏任务后执行微任务队列,然后执行浏览器渲染,从而实现动画效果。而Node.js的Event Loop在每次完成一个宏任务后,会先执行微任务队列,然后继续执行下一个宏任务。
-
Event Loop的运行机制:浏览器的Event Loop通常是单线程的,通过异步回调函数和事件触发来实现非阻塞的异步操作。而Node.js的Event Loop是基于Libuv库实现的,它利用了底层操作系统提供的多线程特性,使得Node.js能够处理更高的并发请求。
-
宏任务和微任务处理不同
nodejs宏任务和微任务还分类型,有优先级的
nodejs宏任务优先级
- Timers-setTimout、setInterval
- I/O callbacks-处理网络、流、TCP的错误回调
- Idle,prepare-闲置状态(nodejs内部使用)
- Poll轮询-执行poll中的I/O队列
- Check检查-储存setImmediate回调
- Close callbacks-关闭回调,如socket.on('close')
setTimeout / io的回调 / idle node内部用的 / poll中的io队列 / check 检查 setImmediate / close关闭回调的一些方法
nodejs微任务优先级
- 包括:promise,asycn/await,process.nextTick
- process.nextTick优先级最高