JS函数防抖

Posted _Junjun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS函数防抖相关的知识,希望对你有一定的参考价值。

当你在输入框每输入一个字符的时候

百度都会不断的根据当下的输入给予新的提示

那么,如果有一个人打字速度非常快

输入了helloworld这个单词 只用了200ms

这是键盘事件函数被触发了10次

我们把这个称为 函数抖动

他每按下一次键盘 浏览器都会向服务器做一次查询

连续触发了10次请求,显示对这个手速特别快的人 这不是他想要的。

我们至少浪费了9次查询 增加了服务器的压力。

解决思路是这样的:

当用户按下键盘后 不要立即向服务器发起请求,

等待300ms,如果没有继续输入 说明输入内容完毕

这时候在向服务器发送请求。

就大大的避免了浪费

例子:

// 这是未做防抖处理的代码:
inputEle.addEventListener("keyup", function(e){
    //ajax(...); 发送请求到服务器  
})
// 这是做了防抖处理的代码
this.$refs.inputEle.addEventListener(
      "keyup",
      (function (e) {
        //这是一个自运行函数
        var t = null;
        return function () {
          //真正的事件函数在这里
          clearTimeout(t); //每次触发,都把前面的定时器关闭,尽管第一次定时器并不存在
          t = setTimeout(function () {
            //开启新的定时器
            //ajax(...); 发送请求到服务器
            console.log("抖动");
          }, 300);
        };
      })()
    );

  },

都有哪些应用场景?

  1. search搜索联想,用户在不断输入值时,用防抖来节约请求资源。
  2. window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次

以上是关于JS函数防抖的主要内容,如果未能解决你的问题,请参考以下文章

js 函数防抖

JS 函数防抖和函数节流

js节流和防抖

防抖函数

JS中节流和防抖函数的实现和区别

js 实现一个debounce防抖函数