如何利用事件循环安排异步更新而不阻塞浏览器绘制?
简答题困难946 次浏览
参考答案与解析
# 核心结论
利用事件循环安排异步更新,关键不是把同步代码简单包进回调,而是限制单次主线程任务的工作量,并在合适的时机主动让浏览器处理输入、样式、布局和绘制。少量且必须在当前任务结束后立即合并的状态更新可使用微任务;需要让出渲染机会的重工作应拆到后续任务;与下一帧视觉状态直接相关的读写可安排到 requestAnimationFrame;低优先级且允许不确定延迟的工作可考虑 requestIdleCallback;纯计算且能够脱离 DOM 的任务可迁移到 Web Worker。选择依据应是时限、优先级、是否依赖页面状态以及任务是否可取消。
# 底层机制
浏览器通常从任务队列取出一个任务执行,在任务结束后
