requestIdleCallback
插入一个函数,这个函数将在浏览器空闲时期被调用。会返回一个ID。提供给Window.cancelIdleCallback(ID) 方法来结束回调
requestIdleCallback(callback, options)
//callback 函数会接收到一个名为 IdleDeadline 的参数
//options 一个对象。
//options 选项: timeout:如果指定了 timeout,并且有一个正值,而回调在 timeout 毫秒过后还没有被调用,那么回调任务将放入事件循环中排队,即使这样做有可能对性能产生负面影响。
兼容性
window.requestIdleCallback = window.requestIdleCallback || function (handler){
let startTime = Date.now();
return setTimeout(function(){
handler({
didTimeout: false,
timeRemaining: function(){
return Math.max(0, 50 - (Date.now() - startTime));
}
})
}, 1)
}
window.cancelIdleCallback = window.cancelIdleCallback || function(id){
clearTimeout(id);
}
示例
if(this.requestId){
cancelIdleCallback(this.requestId);
this.requestId = null;
}
let obj = {list: []};
let addFun= (deadline) => {
while (deadline.timeRemaining() > 0 && i < list.length){
obj.list.push(list[i]);
i++;
}
if(i < list.length){
this.requestId = requestIdleCallback(addFun);
}
}
this.requestId = requestIdleCallback(addFun)