数组分块技术
遇到的问题:当一次执行大量逻辑代码,例如一次性往页面添加大量 dom,就可能导致页面卡死,可以利用数组分块技术处理这个问题。其实就是利用定时器分割循环的技术,在每次时间间隔内只处理一定数量的任务,
函数封装如下:
//循环的数组,处理函数,每次处理数量,时间间隔
function chunk(array, fn, count, delay) {
// 每次执行start函数,处理count条数据
let start = function () {
//每次处理count条数据,如果剩余数据不够count条,就处理array剩余的所有的数据
count = array.length > count ? count : array.length;
for (let i = 0; i < count; i++) {
// 依次处理count条数据
fn(array.shift());
}
};
return function () {
// 调用函数,首先处理一组数据,然后计时,delay时间后,继续处理一下组数据,循环这个过程,知道数据处理完毕
start();
let timer = setInternal(() => {
// 如果数组处理完毕,清空定时器,结束循环
if (array.length === 0) {
clearInternal(timer);
return;
}
// 还有数据待处理,继续处理下一组数据
start();
}, delay);
};
}