为什么requestIdleCallback给我超过16毫秒的时间

时间:2018-10-30 08:16:41

标签: javascript google-chrome

我认为我们的代码需要大约16ms的执行时间,因为渲染速率为60 fps,所以1000/60 =〜16ms。但是,如果我在Chrome中运行它:

requestIdleCallback((deadline)=>{
    console.log(deadline.timeRemaining(), deadline.didTimeout)
});

timeRemaining给了我49.9ms的时间。这是否意味着Chrome不会每16毫秒重新渲染一次?我认为在这种情况下是真的,如果没有任何变化,则无需重新渲染。

1 个答案:

答案 0 :(得分:3)

该规范支持您的假设。在Start an idle period algorithm中说:

  
      
  1. 最后期限成为将来浏览器期望保持空闲状态的时间。用户代理应选择 deadline ,以确保即使从现在到 deadline 的整个时间段内都运行了回调,也不会延迟任何时间紧迫的任务。因此,应将其设置为最小值:通过setTimeout和setInterval设置的活动计时器列表中最接近的超时;通过requestAnimationFrame发布的待处理动画回调的计划运行时; 等待内部超时,例如开始渲染下一帧的截止日期,处理音频或用户代理认为重要的任何其他内部任务。
  2.   

(我的重点)

因此,如果存在内部待处理超时以渲染下一帧,则截止日期必须在此之前。