当前有两种不同的API,旨在将任务分解为计划的回调函数。
据我所知,目前没有实现两个功能的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仍处于试验阶段。