javascript - 如果 requestIdleCallback 的回调执行时间过长而无法在空闲期间完成会怎样?
问题描述
requestIdleCallback 的回调函数会在浏览器空闲期间执行。如果此回调花费太多时间并且无法在空闲期间完成。并且如果用户的交互即将到来,回调是否仍然要执行并且用户的交互被阻止或者浏览器将丢弃回调并准备好处理用户的交互?
解决方案
回调本身不是空闲期的一部分,它只是一个任务,必须运行到结束。
将其视为任务优先级,当事件循环将选择下一个要执行的任务时,如果有其他事情要做,它永远不会选择空闲回调,即您的空闲回调具有最低优先级。
但是一旦它们被执行,它们将被执行到最后,不再有优先级方案,事件循环在完成该任务之前不会再次运行,因此它无法传递更高优先级的任务。
但是可能发生的情况是您请求两个回调在同一空闲期间触发,在这种情况下,是的,在两个回调之间可能会发生其他任务。
正如规格所说:
如果用户代理认为由于新安排的高优先级工作而应该提前结束空闲期,则从算法返回
这意味着不必连续调用完整的回调列表。
推荐阅读
- sql - 如果不存在则插入表并在两种情况下都返回 id
- php - 在 OneToMany 关系上 cascade={"remove"} 的教义行为与同一实体的 ManyToOne
- python - 将图标插入第三个 td 而前两个 td 为空
- ruby-on-rails - ruby on rails中基于关联模型属性的模型排序记录
- ios - 如何将不同的图像解析到我的表格视图可重用单元格中?
- python - 如何使用 Gensim doc2vec 执行高效查询?
- java - 在 Java 中使用同名包中的类
- angular - Angular - ng2-smar-table 添加自定义按钮和操作
- vue.js - 对 Babel.config.js 感到困惑(多个预设)
- java - 如何在普通的java项目中使用maven项目jar