核心是将一次性渲染拆分为小批次以避免主线程阻塞,采用 setTimeout 或 requestAnimationFrame 分批插入 DOM,结合 DocumentFragment 减少重排,配合状态管理控制进度并避开常见陷阱。
核心是把一次性渲染拆成小批次,让浏览器有空隙处理用户交互和样式计算,避免主线程长时间阻塞。
这是最轻量、兼容性最好的方式。关键不是“延迟”,而是把渲染任务推到下一个宏任务,释放当前帧。
setTimeout(fn, 0),不设具体毫秒值,交由事件循环调度更适合动画或滚动场景,能严格对齐屏幕刷新率(约每 16.7ms 一帧),视觉更顺滑。
requestAnimationFrame 回调里执行单批次渲染setTimeout 更精准,但需注意不能在回调里做耗时计算避免“一口气干完”或“卡在中间”,需要明确的起始、分片、结束逻辑。
分片本身不等于性能提升,错误用法反而加重负担。
appendChild 到真实 DOM——这会触发多次重排setInterval 简单轮询,它不感知渲染是否完成,容易堆积任务