概述浏览器事件循环在每个周期处理宏任务队列、渲染更新与微任务队列。长时间微任务或宏任务会推迟渲染帧与交互响应,导致 INP 增大。合理拆分任务与调度可降低主线程压力。关键机制宏任务:如 `setTimeout`、`setInterval`、网络回调等;在每轮事件循环执行一个宏任务,然后进行渲染与微任务处理。微任务:如 `Promise.then`、`MutationObserver`;通常在每帧渲染后立即清空微任务队列。微任务过多或长时间执行会推迟下一帧绘制[参考1]。性能影响与建议避免在微任务中执行长计算或同步布局操作;将重计算拆分到宏任务或后台任务(Web Worker)。使用 `scheduler.postTask` 设置任务优先级并让路;长任务中分段执行并在分段间 `scheduler.yield()`。将非关键逻辑移至 `requestIdleCallback` 或后台线程;减少首屏同步脚本与解析负担。参考与验证[参考1]MDN 中文:JavaScript 并发模型与事件循环(微/宏任务与渲染关系):https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/EventLoop[参考2]web.dev:优化长任务与主线程阻塞分析(50ms 阈值与拆分建议):https://web.dev/articles/optimize-long-tasks[参考3]MDN:Performance API 与 `PerformanceObserver` 监测长任务:https://developer.mozilla.org/zh-CN/docs/Web/API/PerformanceObserver关键词校验关键词与事件循环/渲染/INP 主题一致。

发表评论 取消回复