防抖和节流
防抖和节流,是当频繁触发某个事件时,对其做出相关限制。在在后端开发中,使用防抖和节流,可以减少向服务器请求的频率
概念
防抖: 延迟执行。 n 秒后在执行该事件,若在 n 秒内被重复触发,则重新计时
节流: 固定时间内执行。n 秒内只运行一次,若在 n 秒内重复触发,只有一次生效
效果示意图
实现
未实现防抖和节流
- 定义两个页面元素
1 | <input type='text' class=input /> |
- 监听元素输入事件
1 | const inputEl = document.querySelector('.input') |
防抖
使用setTimeout和clearTimeout实现
1 | // 定义防抖函数 |
节流
时间戳的方式
1 | function throttle(event, await) { |
定时器的方式
1 | function throttle(event, await) { |
时间戳和定时器结合
1 | function throttle(event, await) { |
使用三方库
lodash使用
可以通过npm下载管理,
我这里就直接使用cdn方式
1 | <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script> |
_.debounce(func, wait, option)
1
inputEl.addEventListener('input', _.debounce(getRemoteData, 1000))
_.throttle(func, wait, option)
1
inputEl.addEventListener('input', _.throttle(getRemoteData, 1000))
应用场景
防抖在连续的事件,只需触发一次回调的场景有:
- 搜索框搜索输入。只需用户最后一次输入完,再发送请求
- 手机号、邮箱验证输入检测
- 窗口大小resize。只需窗口调整完成后,计算窗口大小。防止重复渲染。
节流在间隔一段时间执行一次回调的场景有:
- 滚动加载,加载更多或滚到底部监听
- 搜索框,搜索联想功能
- 标题: 防抖和节流
- 作者: Yaurora
- 创建于 : 2023-03-09 11:01:29
- 更新于 : 2023-03-10 18:47:10
- 链接: https://jingyu.life/2023/03/09/node/debounce-throttle/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。