GUIDE 05
回报率与测量局限 — CPS 成绩有多准确
说明鼠标回报率、浏览器事件时间、按键重复和显示器刷新率对 CPS 测量的影响及其局限。
网页上测出的 CPS,依据的不是“手指按下按键的瞬间”,而是“浏览器收到输入事件的瞬间”。这中间要经过好几个环节,每个环节都会产生微小的误差。下面整理了哪些因素有影响、哪些没有。
输入到达屏幕的路径
- 微动被按下,鼠标固件经过去抖处理后确认按下。
- 鼠标按固定周期向电脑报告状态(轮询)。
- 操作系统接收输入并交给浏览器。
- 浏览器生成事件、附上时间,再传给页面上的脚本。
回报率
回报率(轮询率)是鼠标每秒报告状态的次数。报告间隔为 1000 ÷ 回报率(ms)。
| 回报率 | 报告间隔 |
|---|---|
| 125 Hz | 8 ms |
| 500 Hz | 2 ms |
| 1000 Hz | 1 ms |
它对点击次数本身几乎没有影响。即使每秒点击 20 次,点击之间的间隔也有 50 ms,远长于 125 Hz 的报告间隔。不过每次点击的时间可能会以报告间隔为单位被推迟,因此间隔分布可能会被抹平几 ms。
浏览器的时间精度
CPS 测速器使用事件自带的时间(event.timeStamp)和 performance.now()。出于安全考虑,浏览器有时会故意降低这些时间的精度,所以间隔值不要细看到小数点以后,按几 ms 的粒度来理解才合适。即使页面正在执行繁重任务,事件时间也以输入到达的时刻为准,所以不会漏计。
显示器刷新率无关
不管是 60 Hz 还是 240 Hz,屏幕刷新率只改变数字显示出来的速度。输入计数与屏幕刷新是分开进行的,所以刷新率不会改变成绩。
无线·蓝牙
无线连接的报告有时会扎堆到达或出现延迟。点击次数通常不变,但间隔分布可能会变宽。想精确比较的话,请在相同连接方式之间比较。
按键重复
按住键盘按键不放时,操作系统会按一定间隔重复生成输入。CPS 测速器会检查事件的重复标记(KeyboardEvent.repeat),另外如果没有松开按键的记录,也不会计为新的输入。所以光按住不放是刷不了成绩的。
开始与结束的处理
- 开始:由第一次输入启动计时,所以反应时间被排除在外。
- 结束:恰好超过指定时长后的输入会被丢弃。即使屏幕上“测试结束”显示得晚一些,计数仍以事件时间为准。
- 离开:测试中切换到其他标签页时,浏览器可能会放慢计时器,因此本次测试会被取消。
结论
如果是多测几次看趋势,网页测量就足够了。0.1 CPS 左右的差别也可能来自设备和连接状态,请在相同条件下多次比较。