web工作者的performance.now()可靠吗



我有一个长时间运行的脚本,由一个专门的web工作人员执行,我想知道实时执行需要多长时间。

time1 = performance.now();   
doSomethingSyncronous();
time2 = performance.now();
doSomethingAsyncronous(function() {
time3 = performance.now();
}
doSomethingSyncrounous();
time4 = performance.now();

在这个例子中,我希望time2-time1是doSomethingSyncronous()的实际持续时间,就像我希望time3-time2是doSomehingAsyncrouus的实际持续时长一样。

我认为工作线程可以在CPU愿意的时候休眠,而用performance.now()测量的持续时间是不正确的。这是一种正确的假设吗?在这种情况下,衡量网络工作者持续时间的正确方法是什么?

谢谢!

我认为工作线程可以在CPU想睡觉的时候睡觉,而用performance.now()测量的持续时间是不正确的。这是一种正确的假设吗?

部分。是的,操作系统可以让线程随时休眠。当有更重要的工作要做时,或者如果它决定节流cpu以节省电力(例如在移动设备上),就会这样做。

但不,这并不意味着持续时间测量不正确。这只是意味着您的代码在特定环境中运行得较慢。

听起来你在问,如果工人实际上没有做什么,那么performance.now()测量的时间会增加吗?从…起https://developer.mozilla.org/en-US/docs/Web/API/Performance/now

Performance.now()返回的值总是以恒定的速率增加,与系统时钟无关(可能手动调整或由NTP等软件偏移)

[强调矿]

因此,它强烈地表明,时间在任何时候都会增加,而不仅仅是在工人做事的时候。

作为测试,您可以看到http://plnkr.co/edit/alMahs56ACjzH10FUmus?p=preview其中工作人员只是用performance.now():发回消息

self.onmessage = function() {
self.postMessage(self.performance.now());
}

如果以大约1秒的间隔调用,则每次时间会增加大约1秒,而工作线程的实际计算时间要少得多。

因此,使用performance.now()来测量墙上的时钟时间,包括工人何时在做事情和何时不在做事情,似乎是完全合理的。

相关内容

  • 没有找到相关文章

最新更新