防抖与节流都是用来限制函数的执行次数,区别主要在触发时机上

防抖 debounce

第一次触发后,进行倒计,如果倒计时过程中有其他触发,则重置倒计时;否则执行。
用它来丢弃一些重复的密集操作,直到流量减慢。

假设你正在乘电梯上楼,当电梯门关闭之前发现有人也要乘电梯,礼貌起见,你会按下开门开关,然后等他进电梯; 如果在电梯门关闭之前,又有人来了,你会继续开门; 这样一直进行下去,你可能需要等待几分钟,最终没人进电梯了,才会关闭电梯门,然后上楼。

使用场景

  • mouse move 时减少计算次数
  • input 中输入文字自动发送 ajax 请求进行自动补全
  • ajax 请求合并,不希望短时间内大量的请求被重复发送
  • resize window 重新计算样式或布局

    节流 throttle

    第一次触发后先执行,然后等待 n 毫秒后再次执,在单位 n 毫秒内所有重复触发都被抛弃。
    即如果有连续不断的触发,每 n 毫秒执行一次。
    用于在每隔一定间隔执行回调的场景

    假设你正在乘电梯上楼,当电梯门关闭之前发现有人也要乘电梯,礼貌起见,你会按下开门开关,然后等他进电梯;
    但是,你是个没耐心的人,你最多只会等待电梯停留一分钟在这一分钟内,你会开门让别人进来,但是过了一分钟之后,你就会关门,让电梯上楼。

使用场景

  • resize window 重新计算样式或布局
  • scroll 时触发操作,如随动效果
  • 对用户输入的验证,不想停止输入再进行验证,而是每 n 秒进行验证