什么是时间精度降低?用Date.now()测代码时长会额外加时吗?
Date.now() 精度降低对代码执行时长计算的影响
时间精度降低的说明
时间精度降低(Reduced time precision)
为防范计时攻击和指纹识别,Date.now()的精度可能会根据浏览器设置进行舍入。在Firefox中,privacy.reduceTimerPrecision选项默认启用,Firefox 59中默认精度为20微秒,Firefox 60中则为2毫秒。
对执行时长计算的影响
不是“额外增加0到2ms”,而是每次调用Date.now()返回的时间值都会被舍入到最近的2ms倍数。
当你通过「结束时间 - 开始时间」计算代码执行时长时,测量结果与实际时长的误差范围在±2ms以内,但并非固定“额外增加”。举几个场景:
- 若代码实际执行3ms,开始时间被舍为1000ms,结束时间被舍为1002ms,测量结果为2ms,比实际少1ms;
- 若实际执行1ms,开始时间舍为1000ms,结束时间舍为1002ms,测量结果为2ms,比实际多1ms;
- 极端情况误差可达2ms:比如实际执行0.1ms,开始和结束时间被舍入到同一2ms区间,测量结果为0;或是实际执行1.9ms,开始舍为1000ms、结束舍为1002ms,测量结果为2ms。
简言之,Date.now()的精度降低会导致执行时长测量存在±2ms的误差,而非固定额外叠加0-2ms的时长。
内容的提问来源于stack exchange,提问作者1.21 gigawatts
相关产品推荐
相关产品推荐

