-
节流:
- 节流: n 秒内只运行一次,若在 n 秒内重复触发,只有一次生效 - function debounce(func, delay) { let timer = null // 计时器 return function (...args) { clearTimeout(timer) // 清除上一次计时器 timer = setTimeout(() => { // 重新定时 func.apply(this, args) }, delay) } }
2.防抖:
- 防抖是指在事件触发n秒后再执行,如果在n秒内再次被触发,则重新计算时间。(就是在触发某个事件后,在下一次触发之前,
-中间的间隔时间如果超过设置的时间才会发送请求,一直触发就不会发送请求
3.区别
- 相同点:
都可以通过使用 setTimeout 实现
目的都是,降低回调执行频率。节省计算资源
- 不同点:
函数防抖,在一段连续操作结束后,处理回调,利用clearTimeout和 setTimeout实现。函数节流,在一段连续操作中,每一段时间只执行一次,频率较高的事件中使用来提高性能
函数防抖关注一定时间连续触发的事件,只在最后执行一次,而函数节流一段时间内只执行一次
4.应用场景
- 防抖
a、scroll事件滚动触发,\
b、搜索框输入查询\
c、表单验证\
d、按钮提交事件\
e、浏览器窗口缩放,resize事件
-节流
滚动加载,加载更多或滚到底部监听
搜索框,搜索联想功能