当前有两种不同的API,旨在将任务分解为计划的回调函数。

  • setImmediate(非标准)
  • requestIdleCallback(实验性)

  • 据我所知,目前没有实现两个功能的JavaScript运行时(浏览器或Node)。

    我想更好地了解这两个功能之间的比较。我意识到requestIdleCallback具有timeout选项,该选项可用于允许浏览器决定何时调用它,并将IdleDeadline对象传递给回调,其中setImmediate传递了任何提供的参数,但除此之外这些API有何不同?

    例如,以下两个示例在功能上是否相同?
    setImmediate(function() {
        // Do something.
    });
    
    requestIdleCallback(function() {
        // Do something.
    }, {timeout: 0});
    

    如果注册了多个回调但第一个回调的运行时间比空闲时间长,该怎么办?

    最佳答案

    setTimeout将等待一段时间,然后将执行回调。
    requestIdleCallback在执行回调之前将等待main thread空闲。这意味着它不会降低动画的速度,用户仍然可以单击按钮并输入内容。

    如何在setTimeout和requestIdleCallback之间进行选择? setTimeout最适合在必须执行回调的情况下使用(例如:将数据发送到分析服务器或注销用户)。 requestIdleCallback最适合您不希望在执行回调的成本上损害用户体验的情况下(例如:重新渲染DOM)。

    请记住,requestIdleCallback仍处于试验阶段。

    09-11 17:28