数组分块技术

857 阅读1分钟

数组分块技术

遇到的问题:当一次执行大量逻辑代码,例如一次性往页面添加大量 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);
  };
}