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

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

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

输入了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的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次
03-05 16:41