Skip to content

分时函数:

var arr = [];
 var max = 1000;
 for (let i = 0; i < max; i++) {
    arr.push(i);
 }
// 创建一个分时函数
const timerChunk = (sourceArr, callback, count = 1, wait = 200) => {
  let ret, timer = null;
  const renderData = () => {
    for (let i=0;i<Math.min(count, sourceArr.length);i++) {
      // 取出数据
      ret = sourceArr.shift();
      callback(ret)
    }
  return function() {
    if (!timer) {
      timer = setInterval(() => {
        // 如果数据取完了,清空定时器
        if (sourceArr.length === 0) {
          clearInterval(timer);
          return;
        }
        renderData();
      }, wait)
    }
  }  
  }
}
const createElem = (res) => {
      const appDom = document.getElementById('app');
      const divDom = document.createElement('div');
      divDom.innerHTML = res;
      appDom.appendChild(divDom);
  };
var curentRender = timerChunk(arr, (res) => {
    createElem(res);
    // 每次取10条数据,200ms
}, 10, 200);
 console.time('start');
 curentRender(); // start: 0.0341796875 ms
 console.timeEnd('start');

惰性加载函数:

//以书上的例子总结吧(没有想到更好的方案)浏览器的兼容

//未优化前
let addEvent = function(elem, type, handler) {
  if(window.addEventListener) {
      return elem.addEventListener(type, handler, false)
  }

  if(window.attachEvent) {
      return elem.attachEvent(`on${type}`, handler)
  }
}

//缺点:每次加载都需要进行判断进入里面的if条件



//第一次优化:

let addEvent = (function() {
   if(window.addEventListener) {
      return function() {
          elem.addEventListener(type, handler, false)
      }
   }

   if(window.attachEvent) {
      return function() {
          elem.attachEvent(`on${type}`, handler)
      }
   }
})();
//优化后的缺点是 平白无故先调用了下addEvent



//第二次优化就是咱们的惰性加载函数看看是什么样的
let addEvent = function(ele, type, handler) {
      if(window.addEventListener) {
          addEvent = function(ele, type, handler) {
            ele.addEventListener(type, handler, false);
          }
      }else if(window.attachEvent) {
         addEvent = function(ele, type, handler) {
            ele.attachEvent(`on${type}`, handler)
         }
      }

    
      addEvent(ele, type, handler);
  }

//咱们大致分析下这个函数
//1、在使用的第一次判断了下 
//2、直接更改了addEvent(这个时候的addEvent已经是判断后的了,在下次就不会在进行判断了)
//3、为什么在底部执行了一遍  addEvent(ele, type, handler)? 其实就是更改后的函数调用下,不能就返回一个函数。第一次没出发吧