JavaScript 事件循环里微任务和渲染帧的真实关系
先明确一个容易混的点:浏览器的主线程同一时间只能做一件事,事件循环负责调度任务。规范把任务分成 task 和 microtask,task 来自不同的 task source(比如用户交互、网络、定时器),每个 task source 有自己的队列。每一轮循环只从某个 task 队列里取一个 task 执行,执行完后执行 microtask checkpoint,即把微任务队列清空。清空之后,浏览器会判断是否需要 render,需要的话就走样式计算、布局、绘制、合成。render 不是 task,它发生在当前 task 和微任务都处理完之后。