关于防抖和节流我所知道的

简介: 关于防抖和节流我所知道的

image.png



持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

关键词:定时器 性能优化 防抖节流


防抖节流解决什么问题?


本质其实就是控制函数在一段时间内被执行的次数。

防抖 节流
区别 最后只会调用最后一次 每隔一定时间调用一次函数
相同 防止函数多次调用 防止函数多次调用
应用场景 input/click resize/touchmove/mousemove/scroll

防抖是指频繁触发的情况下,只有足够的空闲时间,才执行代码一次。

比如生活中的坐公交,就是一定时间内,如果有人陆续刷卡上车,司机就不会开车。只有别人没刷卡了,司机才开车。

开发中最常用的就是防抖,表单输入、提交按钮等。

节流的概念是指一定时间内函数只运行一次。 throttle 会强制函数以固定的速率执行。因此这个方法比较适合应用于动画相关的场景。

比如我们排队做核酸,一个窗口一分钟只能做一个核酸。

开发中最常见的例子就是用户向下滚动无限加载的页面/表格,需要定时检查用户离底部的距离,然后判断是否需要请求数据append 进列表。这种情况防抖就不适合了,防抖是在用户停止滚动时触发,而我们需要在用户到达底部之前酒开始获取数据。


函数防抖


  1. 函数在一段时间内多次触发只会执行第一次,在这段时间结束前,不管触发多少次也不会执行函数。
  2. 在等待时间内触发此函数,则重新计算等待时间。


函数节流


  1. 在操作结束后才执行
  2. 如果超过了设定的时间,就执行一次处理函数。



image.png


react hooks 如何实现?


image.png


Vue 实现防抖


不要直接在组件的 method 选项中创建防抖函数,然后在 template 中调用这些方法作为事件处理器。

原因是组件使用 export default { ... } 导出的 options 对象,包括方法,会被组件实例重用。如果网页中有 2 个以上的组件实例,那么所有的组件都会应用相同的防抖函数 methods.debouncedHandler 会导致防抖出现故障。


image.png


参考资料:

一起围观由React Hooks防抖引发的面试翻车现场

函数防抖与函数节流

Debouncing and Throttling Explained Through Examples 这篇文章写得非常好,例子举得也好。


目录
相关文章
节流
【10月更文挑战第17天】
|
7月前
节流、防抖
节流、防抖
45 2
|
7月前
|
前端开发 UED
关于防抖和节流的理解
防抖和节流是前端开发中常用的两种性能优化技术。
38 0
防抖&节流
防抖&节流
119 0
什么是防抖和节流,怎么实现一个防抖和节流?
功能:当事件被触发N秒之后再执行回调,如果在N秒内被触发,则重新计时。
|
JavaScript 前端开发
节流与防抖
节流与防抖
54 0
|
JavaScript 前端开发
什么是防抖和节流?如何实现防抖和节流?
防抖(debounce)和节流(throttle)是 JavaScript 中常用的两种性能优化方法。
|
缓存 JavaScript
防抖和节流
防抖和节流