当前有两种不同的API,旨在将任务分解为计划的回调函数。
据我所知,目前没有实现这两个功能的JavaScript运行时(浏览器或Node)。
我想更好地了解这两个功能之间的比较。我意识到requestIdleCallback
有一个timeout
选项,可用于允许浏览器决定何时调用它,并将IdleDeadline
对象传递给setImmediate
传递的回调提供的任何参数,但除此之外,这些API有何不同?
例如,以下两个示例在功能上是否相同?
setImmediate(function() {
// Do something.
});
requestIdleCallback(function() {
// Do something.
}, {timeout: 0});
如果注册了多个回调但第一个回调的运行时间比空闲时间长,该怎么办?
答案 0 :(得分:0)
setTimeout
将等待一段时间,然后将执行回调。
requestIdleCallback
将在执行回调之前等待main thread处于空闲状态。这意味着它不会降低动画的速度,用户仍然可以单击按钮并输入内容。
如何在setTimeout和requestIdleCallback之间进行选择? setTimeout最适合在必须执行回调的情况下使用(例如:将数据发送到分析服务器或注销用户)。 requestIdleCallback最适合您不想在执行回调的成本上损害用户体验的情况下(例如:重新渲染DOM)。
请记住,requestIdleCallback仍处于试验阶段。