Javascript 在IE中的setTimeout(func,0)上使用setImmediate()

Javascript 在IE中的setTimeout(func,0)上使用setImmediate(),javascript,internet-explorer,asynchronous,settimeout,Javascript,Internet Explorer,Asynchronous,Settimeout,根据setImmediate的介绍,它可以在不影响功耗的情况下解决核心性能问题。IE如何做到这一点?(特别是如果设置超时4ms钳制的原因是“试图增加每秒回调次数”导致高功耗) 我的问题是: setImmediate()在引入4ms钳位之前,是否具有setTimeout(func,0)的所有缺点 那么,为什么要使用setImmediate()而不是setTimeout(func,0) 我不是专家,但以下是我的想法: setTimeout(func,0)基本上是对“当此函数返回且UI线程下次空闲时,

根据setImmediate的介绍,它可以在不影响功耗的情况下解决核心性能问题。IE如何做到这一点?(特别是如果设置超时4ms钳制的原因是“试图增加每秒回调次数”导致高功耗)

我的问题是:

  • setImmediate()在引入4ms钳位之前,是否具有setTimeout(func,0)的所有缺点
  • 那么,为什么要使用setImmediate()而不是setTimeout(func,0)

  • 我不是专家,但以下是我的想法:

    setTimeout(func,0)基本上是对“当此函数返回且UI线程下次空闲时,运行此函数”的攻击。这明显不同于其预期用途“2秒后运行此代码”。在前者中,我们并不真正关心函数何时运行——它可以在10毫秒或20毫秒内运行,如果UI线程非常繁忙,它可以在3秒钟后运行

    因为setTimeout和setInterval依赖于时间,所以浏览器使用本机OS计时器API来最有效地实现这一点。计时器API有一个分辨率,它决定了在请求时间运行函数的精度。标准windows API提供了大约15毫秒的分辨率,这意味着每隔15毫秒CPU需要唤醒并检查是否有需要执行的计时器回调。还有高分辨率的计时器API,如果使用这些API,CPU将更频繁地唤醒以检查是否需要回调,从而消耗更多的CPU电源

    在setTimeout(func,0)的情况下,浏览器将安排它使用计时器API运行,并且它将在下一次操作系统计时器唤醒并检查回调时运行,如果使用标准计时器API,回调时间可能为0到15毫秒,这取决于上次迭代的时间。这一切都是不必要的,因为我们根本不在乎时间。我们应该独立于任何计时器来运行它,因此setImmediate API。当然,如果你一直调用setImmediate,它会提高功耗,但当你不使用它时,它不会,不像使用高分辨率定时器

    因此,要回答您的问题:

    1) 可以说,我认为计时器不一定被限制在4ms。他们的分辨率从未超过4ms。是的,大量使用会提高功耗。如上所述,我认为节能来自于怠速时


    2) 出于上述原因

    IE版本中是否存在此功能,其中
    window.requestAnimationFrame
    不存在?不存在。这两个功能都是在IE 10中引入的。只是为了让答案完整。。Chrome 1.0beta使用了1毫秒的油门,后来将其增加到4毫秒,如下所述: