当在performance.now
上使用toFixed
时,它会显示一些数字,我认为这些数字通常是四舍五入的。但似乎范围会根据平台而变化。
在chrome(v87.0.4280.66)上,它最多可以获取35位数字
window.performance.now().toFixed(35); // "241989.00499999945168383419513702392578125"
在node.js(v15.2.1)上,最多只有28个。
performance.now().toFixed(28) // "1092.9840000011026859283447265625"
同样的行为也存在于performance.timeOrigin
上。我认为使用performance.now()
可以进行更准确的测量,但准确度取决于硬件和软件因素,所以他们只是将准确度保持在最低标准上。
1.在performance.now()
上使用toFixed(100)
是否会使它更准确?
1.影响performance.now()
范围的因素有哪些?
1.我们可以肯定地说,(performance.timeOrigin + performance.now()).toFixed(12)
让我们测量的时间精确到几乎飞秒(10 μ m),或者至少比Date.now()
精确得多吗?
2条答案
按热度按时间hc8w905p1#
节点的
performance.now
的字面意思是:它的精确度是 * 纳秒 *.(所以不是26位数,在那个API中是没有意义的).这只是调用
uv_hrtime
(参见node_process_methods.cc),它执行clock_gettime,它只是一个standard way to get nanosecond time.在浏览器中,情况更糟--因为定时攻击会进行指纹识别或缓存值提取,
performance.now
的准确性较低:为了防止计时攻击和指纹识别,performance.now()的精度可能会根据浏览器设置进行舍入。
所以你可以完全依赖毫秒值。
returns是什么clamped in chrome。更多信息请参见
time_clamper.cc
。基本上它的精确度仅限于:故意的。
正如另一个答案所指出的,
.toFixed
只是将数字格式化为字符串,与此无关。注意:API精确到
X
位的事实并不表示第X位之后的位数为零,它只是意味着您只能依赖到该位数的精度。e5nqia272#
我认为说
toFixed()
使它更准确是错误的。基本上
toFixed()
只格式化输入数字。对于
performant.now()
,它返回毫秒值,表示从时间原点开始经过的时间。时间原点是一个标准时间,它被视为当前文档生存期的开始。
因此,从您问题中可以想象,在不同的平台上,这个值的计算方式会有所不同。
来自www.example.commozilla.org: