按照医学博士的要求,引入了setImmediate来解决核心性能问题,而不对功耗产生负面影响。IE如何才能做到这一点?(特别是如果4ms卡住setTimeout的原因是“试图增加每秒的回调次数”导致了高功耗)
我的问题是:
发布于 2014-08-02 01:38:19
我不是专家,但以下是我对此的看法:
setTimeout(func,0)基本上是‘当这个函数返回并且UI线程是下一个空闲时,运行这个函数’的黑客。这与它的预期用法“2秒后运行此代码”有明显的不同。在前者中,我们并不关心函数什么时候运行--它可以在10 is、20 is内运行,如果UI线程真的很忙,它可以在3秒后运行。
因为setTimeout和setInterval是时间依赖的,所以浏览器使用本机OS计时器API来最有效地实现这一点。Timer API有一个解析,它决定了它在请求时运行函数的精确性。标准的windows提供了大约15 be的分辨率,这意味着每15 be就需要唤醒并检查是否有需要执行的计时器回调。还有高分辨率的计时器API,如果使用这些API,CPU会更频繁地醒来,以检查是否需要回调,从而消耗更多的CPU功率。
对于setTimeout(func,0),浏览器将调度它使用计时器API运行,当操作系统计时器下次醒来并检查回调时它将运行,如果使用标准计时器API,回调可能在0到15 OS之间,这取决于多久前是最后一次迭代。这一切都是不必要的,因为我们根本不在乎时间。我们应该独立于任何计时器运行它,因此产生了setImmediate API。当然,如果你继续打电话给setImmediate,它会增加功耗,但是当你不使用它的时候就不会了,不像使用高分辨率计时器。
因此,要回答你的问题:
( 1)我不认为定时器一定要夹到4ms。他们的分辨率从来没有超过4ms。是的,它大量使用setImmediate将提高耗电量。正如上面提到的,我认为节省电力是因为你在空转时。
( 2)基于上述原因!
https://stackoverflow.com/questions/25090606
复制相似问题