REPRODUCE · OBSERVE · VERIFY

先复现,再让 AI 修。

两个小实验,把“感觉有问题”变成可检查的证据。代码在本地运行,无真实 API、无依赖,也不会调用 AI 服务。

EXPERIMENT 01

输入没错,结果怎么倒退了?

一次点击先搜索 HTML,80 ms 后再搜索 React。前者计划等 900 ms,后者计划等 200 ms。这里用 setTimeout 模拟响应;日志显示实际经过时间,调度可能延后。

结果更新策略

等待脚本初始化。

页面实际显示

当前关键词
尚未搜索
最新请求编号
结果来源
尚无结果

结果标题

等待实验开始

请求时间线

  1. 运行实验后,这里会记录请求编号、关键词和处理决定。
要怎样证明修复有效?

故障模式结束后,当前关键词仍是 React,结果来源却是 #1 HTML。切换到修复模式再跑一次,结果应保留 #2 React,日志里能看到 #1 被丢弃。修复没有让旧请求消失,只阻止旧响应更新页面。

代码中的判断是 requestId === latestRequestId。真实项目还需要检查取消请求、卸载、错误和缓存等行为;这个实验只隔离“后发先到”这一条因果链。

EXPERIMENT 02

算得一样,页面还能响应吗?

两种模式对同一串连续整数执行相同的 32 位校验和计算。同步模式一次做完;分批模式每计算约 8 ms,就通过 setTimeout(resolve, 0) 让出主线程,再继续剩余工作。它仍然在主线程运行。

80 ms 心跳 0这是定时器回调计数,不是帧率。
0 次

等待脚本初始化。

本页实际运行结果,所有时间单位为 ms
模式 总耗时 最长工作片段 运行期心跳 校验和
同步 尚未运行
分批 尚未运行

两种模式都运行后,检查校验和是否一致。

总耗时由 performance.now() 实测,包含分批等待时间,不含启动前留给页面绘制的等待。最长工作片段只测计算函数的执行区间。心跳计数还受浏览器调度影响;请保持标签页在前台,在同一计算量下比较。结果依赖设备、系统负载与预热情况,分批不一定更快。这些值不是 INP,也不是 Core Web Vitals。

怎样收集能交给 AI 的性能证据?

固定计算量,分别运行两种模式,记录设备、浏览器、是否启用 CPU 限速和两次实测结果。打开 DevTools 的 Performance 面板录制,再用调用栈定位计算函数。把现象、录制证据和预期写进提示词,要求 AI 先解释瓶颈,再做最小改动。

心跳在同步计算期间无法执行。分批处理给定时器和用户输入提供了执行机会,但单个片段仍可能超过目标预算,尤其在慢设备上。比较总耗时、响应性和校验和,不能只挑一个看起来更漂亮的数字。

把证据带回代码审查。打开完整提示词模板,或查看 实验脚本