Javascript web workers中的performance.now()可靠吗?

Javascript web workers中的performance.now()可靠吗?,javascript,multithreading,asynchronous,timing,web-worker,Javascript,Multithreading,Asynchronous,Timing,Web Worker,我有一个长时间运行的脚本,由一个专门的web工作者执行,我想知道在现实世界中执行需要多长时间 time1 = performance.now(); doSomethingSyncronous(); time2 = performance.now(); doSomethingAsyncronous(function() { time3 = performance.now(); } doSomethingSyncrounous(); time4 = performance.now();

我有一个长时间运行的脚本,由一个专门的web工作者执行,我想知道在现实世界中执行需要多长时间

time1 = performance.now();   
doSomethingSyncronous();
time2 = performance.now();
doSomethingAsyncronous(function() {
   time3 = performance.now();
}
doSomethingSyncrounous();
time4 = performance.now();
在本例中,我希望time2-time1是doSomethingSyncronous()的实际持续时间,同样,我希望time3-time2是doSomethingSyncronous的实际持续时间

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

谢谢

我认为工作线程可以在CPU需要时休眠,而使用performance.now()度量的持续时间是不正确的。这是一种正确的假设吗

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


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

听起来您在问,如果工作人员实际上没有做什么,那么通过
性能衡量的时间是否会增加。现在()?从

Performance.now()返回的值始终以恒定速率增加,与系统时钟无关(可以手动调整,也可以通过NTP等软件进行调整)

[我的重点]

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

作为测试,您可以看到工作人员在何处仅ping回具有
性能的消息。now()

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


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

我发现,如果计算机完全进入睡眠状态,那么
performance.now()
“暂停”。我认为这是有道理的,因为它不受系统时钟的影响,而知道电脑睡眠时间的唯一方法就是查看时钟。
self.onmessage = function() {
  self.postMessage(self.performance.now());
}