JS中的事件循环
浏览器与 Node.js 事件循环差异对比。
#type / synthesis
#status / growing
#resource / javascript
#resource / nodejs
#platform / browser
[!info] related notes
- 所属 MOC: ecmascript异步, javascript-in-nodejs-moc, javascript-in-browser-moc
- 上位主题: javascript-in-nodejs, javascript-in-browser
- 前置概念: js事件循环
- 相关概念: event-emitter, worker-threads
- 关系笔记: ecmascript异步
- 面试问法: Event Loop、宏任务和微任务怎么理解
JS 中的事件循环
这篇笔记不再回答“事件循环是什么”,那部分收敛到 js事件循环。
这里专门比较:同样叫事件循环,浏览器和 Node.js 到底差在哪。
共同前提
- JavaScript 都先执行当前同步代码
- 异步回调不会立刻插队
- Promise 回调都要回到微任务体系理解
如果这部分还不稳,先回到 js事件循环。
浏览器更关注什么
- 宏任务 / 微任务 / 渲染时机
- DOM 事件和页面渲染协同
- 微任务清空后通常才有机会进入渲染
Node.js 更关注什么
- libuv 驱动的多阶段循环
timers、poll、check等阶段差异setImmediate、process.nextTick等宿主特有细节
最重要的区别
| 对比项 | 浏览器 | Node.js |
|---|---|---|
| 关注重点 | 页面交互与渲染 | I/O 与服务器任务调度 |
| 常见心智模型 | 宏任务 / 微任务 / 渲染 | 多阶段循环 + 微任务 |
| 特有点 | DOM 事件、渲染时机 | setImmediate、process.nextTick、libuv |
如何使用这两篇笔记
- 学基础规则:js事件循环
- 学宿主差异:当前这篇