优化高频率执行js代码
防抖
在事件被触发后的某个时间限制内,事件处理函数只执行一次。
在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。
应用场景:搜索框搜索输入,最后一次输入完再发送请求;手机号、邮箱验证输入检测。
1 | function debounce(fn,delay){ |
缺点:若不断触发同一事件会导致回调函数无法执行
节流
每隔一段时间,只执行一次函数
如果短时间内大量触发同一事件,那么函数在执行一次后,该函数在指定的时间期限内不再工作,直至过了这段时间才重新生效。
与防抖相比,多了防止不断触发同一事件而导致不执行回调函数的情况。
应用场景:滚动加载,加载更多或滚到底部监听
1 | //第一种:定时器 |
相同点
- 都可以使用setTimeout实现
- 目的都是降低回调执行频率,节省计算资源
不同点
- 防抖,在一段连续操作结束后,处理回调函数。
- 节流,在一段连续操作中,每隔一段时间只执行一次回调函数。