Node构建JSON清单如何做最近秩P90耗时:用本地脚本建立可复核指标

发布时间:2026/10/30 19:21:53
Node构建JSON清单如何做最近秩P90耗时:用本地脚本建立可复核指标

JSON 解码只能确认格式,不代表字段齐全;把第三方日志转换成本文中间格式时,应另外核对键名、单位和类型。本文从Node构建JSON清单的受控中间格式读取记录,统一使用毫秒和退出码。要观察耗时分布的偏慢部分,可以计算百分位,但必须说明采用哪种算法。

先固定可回放的数据

前端构建包装器可在一次运行结束后,把各阶段结果整理为受控中间格式,交给离线看板回放。这里采用对象数组保存完整快照,故意留下两次同名测试,使失败尝试不会被后来的成功覆盖。验收先确认数组成员仍是独立事件,再检查耗时与退出状态没有被显示层改写。

importjson raw='[{"step":"build","ms":120,"code":0},{"step":"test","ms":40,"code":1},{"step":"test","ms":60,"code":0},{"step":"pack","ms":80,"code":2}]'

恢复结构并统一字段

清单顶层是记录数组,每条记录包含步骤名、毫秒数和退出码。读取结构化 JSON 可以保留数值类型,不需要从彩色终端输出里猜测字段。

rows=json.loads(raw)ifany(r["ms"]<0forrinrows):raiseValueError()

计算本篇的指标

本例把百分位定义为最近秩法:把九成样本位置向上取整,再读取有序序列。先写清算法,才不会与采用插值的统计工具产生无意义争论。

times=sorted(r["ms"]forrinrows)n=len(times);result=times[(9*n+9)//10-1]ifnelseNone

对照独立期望值

期望值根据样本数与向上取整的位置独立推导。验收不仅要比较最终耗时,还要复核位置从一开始计数到数组下标从零开始的转换;当样本数恰好是十的倍数时,也应补充边界用例。

want=120ifresult!=want:raiseValueError(result)print(result)

用四条耗时记录演示位置向上取整,使九成位置落到第四个样本。

这个选择可以明确区分最近秩法与插值法,避免两个工具给出不同数值时,只根据显示结果就判断某个实现错误。

后续替换导出格式时,可以保留相同结构的记录与指标测试;改变指标定义时,则可以重复利用同一份输入样本,分别检查两类变化。