如何衡量绩效的准确性

时间:2018-12-29 09:32:19

标签: javascript google-chrome

我正在尝试弄清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。

1 个答案:

答案 0 :(得分:0)

这些结果以毫秒为单位(55K 表示您在执行该脚本时打开了15小时的页面...)

关于精度,现在这取决于浏览器,并且在找到针对TimeBased攻击的更好解决方案时可能会更改,但是是的,Chrome确实会限制精度(0.1s)并增加抖动(±0.1ms),而Firefox会进一步限制(默认情况下为1ms)并增加抖动(尽管您可以在其中设置这些选项),根据this comment,Edge确实类似于Chrome,而且Safari似乎仅对1ms进行钳制...