防抖 debounce
第一次触发后,进行倒计,如果倒计时过程中有其他触发,则重置倒计时;否则执行。
用它来丢弃一些重复的密集操作,直到流量减慢。
假设你正在乘电梯上楼,当电梯门关闭之前发现有人也要乘电梯,礼貌起见,你会按下开门开关,然后等他进电梯; 如果在电梯门关闭之前,又有人来了,你会继续开门; 这样一直进行下去,你可能需要等待几分钟,最终没人进电梯了,才会关闭电梯门,然后上楼。
使用场景
- mouse move 时减少计算次数
- input 中输入文字自动发送 ajax 请求进行自动补全
- ajax 请求合并,不希望短时间内大量的请求被重复发送
- resize window 重新计算样式或布局
节流 throttle
第一次触发后先执行,然后等待 n 毫秒后再次执,在单位 n 毫秒内所有重复触发都被抛弃。
即如果有连续不断的触发,每 n 毫秒执行一次。
用于在每隔一定间隔执行回调的场景假设你正在乘电梯上楼,当电梯门关闭之前发现有人也要乘电梯,礼貌起见,你会按下开门开关,然后等他进电梯;
但是,你是个没耐心的人,你最多只会等待电梯停留一分钟; 在这一分钟内,你会开门让别人进来,但是过了一分钟之后,你就会关门,让电梯上楼。
使用场景
- resize window 重新计算样式或布局
- scroll 时触发操作,如随动效果
- 对用户输入的验证,不想停止输入再进行验证,而是每 n 秒进行验证