在线秒表
毫秒级的在线秒表,可以暂停、继续、重置和计次,每次计次的累计用时和单圈间隔都会列出来。
未开始
00:00.000
计次
还没有计次。开始计时后点「计次」,就能把每一段的用时记下来。
为什么用 performance.now()
页面上的时间戳有两种。Date.now() 返回的是墙上时钟的毫秒数,也就是系统当前时间,它会随着系统对时、时区调整或者用户手动改时间而跳变,精度通常也只有一毫秒甚至更粗。如果秒表用它来算差值,遇到系统自动校时,读数可能会突然跳一下,甚至算出负数。
performance.now() 返回的是从页面开始加载那一刻起经过的毫秒数,它是单调递增的:只会往前走,不会因为校时而倒退,并且带有亚毫秒的小数精度。用来测「过了多久」最合适,也不会被系统时间的变化干扰。这就是这里选它的原因。
为什么不累加定时器次数
常见写法是每 10 毫秒加 10,或者用一个计数器乘固定间隔。问题是浏览器为了省电会主动限制后台标签页的定时器频率,定时器可能几十毫秒甚至一秒才执行一次,也可能连着补执行几次,累加出来的时间就偏了,而且误差会一直累积下去。
这里的做法是:运行期间只记一个开始时刻,每次刷新都用 performance.now() 减去它算出已经过了多久,暂停时把这个差值存下来。刷新只负责「显示得跟不跟手」,不影响读数本身,所以后台标签页被降频、电脑休眠之后再回来,时间仍然是准的。回到前台时还会立刻补算一次,不会停在旧数字上。
计次怎么看
「累计用时」适合记总成绩,比如跑步的分段时间;「本段间隔」适合看每一圈是否稳定,两者同时给出就不用自己相减。段落之间差距大时,跑得最快和最慢的那两次会被标出来。复制出来的文本用制表符分列,粘进 Excel 或表格里会自动分成三列,方便继续分析。
秒表完全在浏览器里跑,刷新或关闭页面就会清空,不会保存历史记录,也没有任何网络请求。需要长期留档的话,用完记得把计次复制出来。