函数防抖和函数节流

函数防抖和函数节流

场景:在做商城时,有商品的搜索功能,在商品搜索输入框中输入一次,服务器就会去校验。输入一个字符就发送一次请求,这样直观的就会导致性能差。

防抖节流都是控制事件触发的频率。

防抖  debounce

触发高频率事件n秒后函数只会执行一次,如果n秒内高频时间再次触发就会重新计算时间

特点:多次触发不执行,不触发之后一段时间再执行

案例:

 

 

获取搜索结果
getQueryTitle(query){
  url:"",
  data:{
    query
 }

}
 

实现方法:

  每次触发事件时设置一个延时调用函数,并取消之前的延时调用方法。

手写简单防抖函数

function debounce(fn,delay) {
     let timeout = null;
     return function() {
     clearTimeout(timeout); //清楚上一次时间函数
     timeout = setTimeout(() => {   //重置延时时间函数
         fn.apply(this);
    },delay)
 }
}

参考:https://www.jianshu.com/p/c8b86b09daf0

立即执行版本和非立即执行版本

节流  throttle

高频事件触发,但是在n秒内只会执行一次

特点:多次触发并不会执行,到了一定时间后在执行

手写简单节流函数

function throttle(fn,delay){
    let lastTime=0;//最后一次执行时间
    return function(){
    let nowTime=Date.now();  //现在时间
    if(nowTime-lastTime>delay){  
         fn.apply(this); 
        lastTime=nowTime;  //同步时间
     }
  }
}

参考:https://www.jianshu.com/p/c8b86b09daf0

时间戳版本和定时器版本

 

原文地址:https://www.cnblogs.com/babilong/p/13545098.html