我正在尝试弄清performance.now
在Chrome中的准确性。使用以下代码:
const results = []
let then = 0
for(let i = 0; i < 10000; i++) {
const now = performance.now()
if (Math.abs(now - then) > 1e-6) {
results.push(now)
then = now
}
}
console.log(results.join("\n"))
我得到以下结果:
55058.699999935925
55058.79999976605
55058.89999959618
55058.99999989197
55059.09999972209
我的理解是这些值以秒为单位,这意味着每次测量的间隔大约为100ms。我的测试方法是否有缺陷或性能。现在在Chrome中实际上限制为100毫秒吗?我在网上看了一下,发现发现精度为100μs,抖动为100μs。
答案 0 :(得分:0)
这些结果以毫秒为单位(55K 秒表示您在执行该脚本时打开了15小时的页面...)
关于精度,现在这取决于浏览器,并且在找到针对TimeBased攻击的更好解决方案时可能会更改,但是是的,Chrome确实会限制精度(0.1s)并增加抖动(±0.1ms),而Firefox会进一步限制(默认情况下为1ms)并增加抖动(尽管您可以在其中设置这些选项),根据this comment,Edge确实类似于Chrome,而且Safari似乎仅对1ms进行钳制...