async function findMax(largeList){
return new Promise((resolve,reject) =>{
requestIdleCallback(()=>{
try{
let max = largeList[0]
for(let i=0;i<largeList.length;++i){
if(largeList[i]>max){
max = largeList[i];
}
}
resolve(max);
}
catch(error){
reject(error);
}
});
});
}
window.requestIdleCallback()方法将在浏览器的空闲时段内调用的函数排队。这使开发者能够在主事件循环上执行后台和低优先级工作,而不会影响延迟关键事件,如动画和输入响应。函数一般会按先进先调用的顺序执行,然而,如果回调函数指定了执行超时时间timeout,则有可能为了在超时前执行函数而打乱执行顺序。
你可以在空闲回调函数中调用requestIdleCallback(),以便在下一次通过事件循环之前调度另一个回调。
这个方法只是把js操作移到了一个空闲的时间里,没有切片还是会卡