首页 > 解决方案 > 如果 requestIdleCallback 的回调执行时间过长而无法在空闲期间完成会怎样?

问题描述

requestIdleCallback 的回调函数会在浏览器空闲期间执行。如果此回调花费太多时间并且无法在空闲期间完成。并且如果用户的交互即将到来,回调是否仍然要执行并且用户的交互被阻止或者浏览器将丢弃回调并准备好处理用户的交互?

标签: javascriptrequestidlecallback

解决方案


回调本身不是空闲期的一部分,它只是一个任务,必须运行到结束。

将其视为任务优先级,当事件循环将选择下一个要执行的任务时,如果有其他事情要做,它永远不会选择空闲回调,即您的空闲回调具有最低优先级。

但是一旦它们被执行,它们将被执行到最后,不再有优先级方案,事件循环在完成该任务之前不会再次运行,因此它无法传递更高优先级的任务。

但是可能发生的情况是您请求两个回调在同一空闲期间触发,在这种情况下,是的,在两个回调之间可能会发生其他任务。

正如规格所说:

如果用户代理认为由于新安排的高优先级工作而应该提前结束空闲期,则从算法返回

这意味着不必连续调用完整的回调列表。


推荐阅读