Elab掘金:ReactFiber架构浅析[1]已对ReactFiber架构实现进行了浅析。React内部实现了该方法requestIdleCallback,即一帧空闲执行任务,但Schedular+Lane模式远比requestIdleCallback复杂的多。这里我们先通过了解requestIdleCallback都做了些什么,再尝试通过requestAnimationFrame+MessageChannel来模拟React对一帧空闲判断的实现。
2.requestIdleCallbackwindow.requestIdleCallback()[2]
2.1概念理解图:简单描述帧生命周期
RequestIdleCallback简单的说,判断一帧有空闲时间,则去执行某个任务。
目的是为了解决当任务需要长时间占用主进程,导致更高优先级任务(如动画或事件任务),无法及时响应,而带来的页面丢帧(卡死)情况。
故RequestIdleCallback定位处理的是:不重要且不紧急的任务。
RequestIdleCallback参数说明:
window.requestIdleCallback(callback[,options]);callback为要执行的回调函数,该函数会接收deadline作为对象。//回调函数接收deadlinetypeDeadline={timeRemaining:()=number//当前剩余的可用时间。即该帧剩余时间。didTimeout:boolean//是否超时。}//接收回调任务typeRequestIdleCallback=(cb:(deadline:Deadline)=void,options?:Options)=number2.2实现demo
requestIdleCallback处理任务说明:
Demo: