由 pnpm docs:lessons 生成。内容源:src/data/performance.json;生成与共同合同:scripts/generate-performance.mjs。本页包含教师参考答案。
理解主线程、任务、微任务与交互等待。主线程任务结束不代表立刻渲染;微任务队列会在渲染机会前清空。把 Promise.resolve 当作让出渲染机会会继续阻塞。
交互可含输入等待、处理及呈现延迟;只看 handler 不完整。
setTimeout / scheduler.yield 可给后续任务和渲染机会;Promise 微任务不保证这一点。
防抖减少次数,不减少最后一次工作的成本。拆分必须保持顺序和计算结果。
比较计算、拆分任务和防抖。先预测输入变化会影响哪个阶段;只改变一个条件,比较输出与观察范围;将模型线索对应到真实录制。模型不计实战完成。
输入事件之后,提示与结果迟迟不能绘制。
- 从课程准备商城;固定视口、CPU / Network 与缓存条件,再开始录制。
- 准备场景后再开始 Record,点击执行目标操作,观察搜索中与结果的呈现。
- 在 Main 查看任务、微任务与 Rendering;同时查看 Interactions / Event Timing。
- 固定输入与数据量,比较分批前后校验值和最长阻塞段。自定义反馈时间不是正式 INP。
- 保存故障与对照证据;错误方案不能记录修复。
- 回教程选择原因、证据与验证,并记录测量条件和不确定范围。
为新交互选方案且保证结果正确。输入与故障随机变化;可能再次抽到同一类。
| 配置 | 根因 | 证据 | 针对性验证 |
|---|---|---|---|
| 配置1 | 一次同步任务完成所有计算 | 一个连续长任务,提示未及时绘制 | 分批处理并让出任务,核对完整结果 |
| 配置2 | 仅通过 Promise 微任务拆分计算 | 多段微任务仍处于同一阻塞窗口,没有任务级让出 | 用任务级让出替代微任务链 |
| 干扰项 | 只凭总耗时或颜色猜测 | 没有与本次操作对应的实际证据 | 改变所有条件且不复测 |
- 先区分加载、交互、稳定性和绘制成本,不把所有慢归给网络。
- 在 Main 查看任务、微任务与 Rendering;同时查看 Interactions / Event Timing。
- 比较两种解释:一次同步任务完成所有计算;仅通过 Promise 微任务拆分计算。保持输入与条件一致,再核对针对性对照。
正常结果要保持 SKU、数量与业务校验值一致;对照只改变本课对应成本。先固定条件再录制,停止录制后保存 trace;恢复限速、Rendering 高亮和媒体模拟。CPU / 帧率结果按实际观测和多轮趋势解释,不能把课堂耗时当线上目标。