我有一个由专门的网络工作者执行的长时间运行的脚本,我想知道在现实世界中执行需要多长时间。
time1 = performance.now();
doSomethingSyncronous();
time2 = performance.now();
doSomethingAsyncronous(function() {
time3 = performance.now();
}
doSomethingSyncrounous();
time4 = performance.now();
在这个例子中,我希望 time2-time1 是 doSomethingSyncronous() 的实际持续时间,同样我希望 time3-time2 是 doSomethingAsyncrounous 的实际持续时间。
我想工作线程可以在 CPU 需要的时候休眠,并且用 performance.now() 测量的持续时间是不正确的。这是一种正确的假设吗?在那种情况下,衡量网络工作者持续时间的正确方法是什么?
谢谢!
我想工作线程可以在 CPU 需要的时候休眠,并且用 performance.now() 测量的持续时间是不正确的。这是一种正确的假设吗?
部分。是的,操作系统可以让线程在需要时休眠。这是在有更重要的工作要做时完成的,或者如果它决定节流 cpu 以节省电量(例如在移动设备上)。
但是不,这不会使持续时间测量不正确。这只是意味着您的代码在该特定环境中运行速度确实较慢。
这听起来像是在问,如果工人实际上没有做某事,那么用
performance.now()
衡量的时间会增加吗?从https://developer.mozilla.org/en-US/docs/Web/API/Performance/now
Performance.now() 返回的值always 以恒定速率增加,独立于系统时钟(可以手动调整或通过 NTP 等软件倾斜)
[强调我的]
所以它强烈建议时间一直在增加,而不仅仅是在工人做事的时候。
作为测试,您可以看到 http://plnkr.co/edit/alMahs56ACjzH10FUmus?p=preview 工作人员只是用
performance.now()
: ping 回一条消息
self.onmessage = function() {
self.postMessage(self.performance.now());
}
如果以1秒左右的间隔调用,每次都会增加1秒左右,而worker线程实际计算的时间要多少
所以使用
performance.now()
来测量挂钟时间,包括工人何时做事和何时不做,似乎是完全合理的。