Chrome 事件循环机制
Chrome 浏览器的事件循环机制是 JavaScript 异步编程的核心,理解它对于编写高性能的前端应用至关重要。
事件循环组成
-
调用栈
- 存储函数调用
- 遵循 LIFO(后进先出)原则
- 同步代码在调用栈中执行
-
任务队列
- 宏任务队列:setTimeout、setInterval、I/O、UI 渲染
- 微任务队列:Promise.then、MutationObserver、queueMicrotask
-
Web APIs
- 浏览器提供的异步 API
- DOM 操作、定时器、网络请求等
执行顺序
- 执行同步代码(调用栈)
- 调用栈为空时,检查微任务队列
- 执行所有微任务
- 执行一个宏任务
- 重复步骤 2-4
关键概念
- 微任务优先级高于宏任务
- 每次执行宏任务前都会清空微任务队列
- UI 渲染在宏任务之间进行
实际应用
javascriptconsole.log('1'); setTimeout(() => { console.log('2'); Promise.resolve().then(() => console.log('3')); }, 0); Promise.resolve().then(() => console.log('4')); console.log('5'); // 输出顺序:1, 5, 4, 2, 3
性能优化
- 避免长时间阻塞主线程
- 合理使用微任务和宏任务
- 利用 requestAnimationFrame 进行动画
- 避免在微任务中进行大量计算