有的时刻能够会触及大批数据的同步处置惩罚,然则我们晓得同步处置惩罚的一个很严重的题目就是障碍历程,就是卡顿,比方下面的这段代码:
data.map(val=>{
console.log(val * 2);
})
假如数据量只要几千、几万的时刻也许还好,然则假如数据量过大,那末就会形成很明显的卡顿。不但会障碍衬着,还会障碍用户的交互事宜。
能够做一个时候的测试:
function handleData(data){
data.map(val=>{
// 能够会有许多东西在这里
return val * 2;
})
}
var data = Array(10000000); data.fill(1);
console.time("Timer");
handleData(data);
console.timeEnd("Timer")
在我的台式上测试效果为1s以上,假如在手机端或许低机能的装备上,能够会更久。意义就是当处置惩罚器抵达timeEnd
这个处所的时刻,已经过了最少1s
时候。
那末就能够斟酌运用异步支解处置惩罚的体式格局,确保不会障碍衬着和用户事宜。
直接修正上面的例子:
function handleData(data){
var chunk = data.splice(0, 1000);
chunk.map(val=>val*2);
if(data.length > 0) {
setTimeout(()=>{
handleData(data);
}, 0);
}
}
var data = Array(10000000); data.fill(1);
console.time("Timer");
handleData(data);
console.timeEnd("Timer")
我当地测试效果是25ms
摆布,虽然处置惩罚一切数据的总时候能够更长了,然则优点就是这是一连串的异步处置惩罚,并不会影响其他的流程。不会形成页面卡顿的题目。