当前位置: 首页 > news >正文

前端开发中的防抖与节流

  在前端开发的世界里,防抖(debounce)和节流(throttle)是两个非常重要的概念,它们能够帮助我们更好地处理频繁触发的事件,提升用户体验和系统性能。

一、防抖(debounce)

  1. 概念解析
    • 防抖,顾名思义,防止抖动。就像我们敲键盘时,不能把一次敲击误认为多次输入。在前端开发中,防抖主要是为了避免事件被误触发多次。例如,在登录、发短信等场景中,如果用户点击按钮太快,可能会发送多次请求,这时候就需要使用防抖来确保只发送一次请求。
    • 代码实现重在清零clearTimeout。可以把防抖比作等电梯,只要有一个人进来,就需要再等一会儿。

以下是一个简单的防抖函数示例代码:

function debounce(f, wait) {let timer;return (...args) => {clearTimeout(timer);timer = setTimeout(() => {f(...args);}, wait);};
}
  1. 应用场景
    • 避免按钮重复点击:在登录、发短信等按钮的点击事件中,使用防抖可以防止用户点击太快导致发送多次请求。
    • 调整浏览器窗口大小:当调整浏览器窗口大小时,resize事件会频繁触发,造成过多的计算。使用防抖可以确保在用户停止调整窗口大小后,只进行一次计算。
    • 文本编辑器实时保存:当文本编辑器无任何更改操作一秒后进行保存,可以使用防抖来避免频繁保存,提高性能。

二、节流(throttle)

  1. 概念解析
    • 节流,顾名思义,控制水的流量。在前端开发中,节流是控制事件发生的频率,比如控制为 1 秒发生一次,甚至 1 分钟发生一次。它与服务端的限流(Rate Limit)类似。
    • 代码实现重在开锁关锁timer = timeout; timer = null。可以把节流比作过红绿灯,每等一个红灯时间就可以过一批。

以下是一个简单的节流函数示例代码:

function throttle(f, wait) {let timer;return (...args) => {if (timer) {return;}timer = setTimeout(() => {f(...args);timer = null;}, wait);};
}
  1. 应用场景
    • scroll事件:在页面滚动时,每隔一秒计算一次位置信息等,可以使用节流来减少计算量,提高性能。
    • 浏览器播放事件:在浏览器播放视频时,每隔一秒计算一次进度信息等,可以使用节流来避免频繁计算。
    • input框实时搜索:在input框实时搜索并发送请求展示下拉列表时,可以每隔一秒发送一次请求,既可以使用防抖,也可以使用节流。

  总之,防抖和节流在前端开发中有着广泛的应用,它们可以帮助我们优化性能,提升用户体验。在实际开发中,我们可以根据具体的需求选择合适的方法来处理频繁触发的事件。


http://www.mrgr.cn/news/30274.html

相关文章:

  • ECharts 实现大屏地图功能
  • TP6将HTML转换为PDF文件,非法UTF-8编码和中文乱码问题
  • netcat工具安装和使用
  • LSTM实现地铁短时客流预测
  • stack和queue --->容器适配器
  • 操作系统(12) (并发(3)------哲学家进餐问题(Dining Philosophers Problem)解决方案/管程(monitor))
  • 【数据结构-差分】【hard】力扣995. K 连续位的最小翻转次数
  • 【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
  • 汽车保单信息智能文档抽取上线!精准解析复杂表格,赋能车险、汽车金融多业务自动化
  • 美创科技唯一入选安全领域数字工程服务商并获“四星”评定!
  • 无公网IP远程访问内网部署的OpenMediaVault NAS
  • 【电商API接口定价】618品牌定价参考(电商API接口数据采集)
  • std::string 常见的操作
  • 有毒有害气体检测仪的应用和性能_鼎跃安全
  • 百度营销转化追踪(网页JS布码)
  • gazebo 仿真阶段性问题汇总二
  • C# 携手 7-Zip 命令行:大文件压缩的终极武器?
  • 电脑装系统装错了盘怎么恢复文件?全方位指南
  • 排序题目:三次操作后最大值与最小值的最小差
  • 智能车镜头组入门(四)元素识别
  • 图片翻译器,分享四款直接翻译图片的软件!
  • SourceTree保姆级教程3:(分支创建 及 合并)
  • 深入探讨 JVM 内存泄漏与溢出:定位与解决方案
  • VirtualBox7.1.0 安装 Ubuntu22.04.5 虚拟机
  • 【机器学习】OpenCV高级图像处理
  • 睢宁自闭症寄宿学校:培养特殊孩子的无限潜能