js防抖和节流

js中防抖和节流主要用来做一些性能方面的优化,这是一种思想,具体实现的方式可以有很多种,那么到底什么是防抖和节流和怎么去实现呢?

防抖:

可以将防抖比喻为游戏中的人物施放技能前的技能前摇,你必须要等到这个前摇结束才能把这个技能释放出来。

意思就是当我们想要去做一件事情的时候,想要在这段时间内只去做一遍,不想进行多遍的操作。例如在输入框内用户输入字符想要进行一个搜索的时候,每次输入一个字符都向服务器请求数据的话,那这对服务器的负荷是很大的,我们可能只想用户在完全输入完字符后才向服务器进行一个请求,那么这时候就可以用上防抖了。

具体实现代码:

function debounce(fun, delay) { //fun为你要执行的函数,delay为多长时间过后不再操作才能执行
      let timer = null;
      return function (...args) {
        if (timer) clearTimeout(timer); //如果存在定时器就清除定时器,重新开始计算
        timer = setTimeout(() => {
          fun.apply(this.args) //通过apply调用函数
        }, delay)
      };
    }

节流:

可以将节流比喻为游戏中的人物释放技能后的技能冷却时间,你要等待技能冷却才能进行下一次的释放。

意思就是我们在这段时间之内只能进行一次操作,下一次操作要在这段时间过后。例如用户在点击表单提交后,界面由于一些原因卡住了,也没有提示窗口弹出,用户在没有得到提示的情况下连续点击表单提交按钮,就会给服务器进行多次的重复提交,那么这时候就可以用上节流了。

具体实现代码:

function throttle(fun, delay) { //fun为你要执行的函数,delay为多长时间过后才能再次执行
      let value = true;
      return function (...args) {
        if (value) {
          value = false;
          fun.apply(this.args); //通过apply调用函数
          setTimeout(() => {
          value = true; //重新将value赋值为true
          }, delay)
        }else{
          return false;
        }
      };
    }

js防抖和节流

上一篇:前端入门之HTML


下一篇:jsonwebtoken使用方法