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

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

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 这篇文章写得非常好,例子举得也好。


目录
相关文章
|
Go
浅谈Golang广播sync.Cond
浅谈Golang广播sync.Cond
193 0
|
9月前
|
机器学习/深度学习 存储 人工智能
2025年NVIDIA RTX 4090云服务器租赁价格与选型指南
本文探讨了在主流云服务商尚未提供RTX 4090实例的背景下,如何选择高性能GPU服务器。分析了市场现状、替代方案性能,并推荐阿里云的GN7i(NVIDIA A10)、GN6v(NVIDIA V100)等实例,提供了成本优化策略与选型建议,确保用户在AI训练、图形渲染等场景中实现效率和成本的最佳平衡。
|
Go
Golang的time.NewTimer单次定时器使用案例
这篇文章介绍了Go语言中time包的多种定时器使用案例,包括单次定时器的创建、阻塞程序运行的Sleep函数、重置和停止定时器的方法,以及After和AfterFunc函数的使用。
232 5
Golang的time.NewTimer单次定时器使用案例
|
Linux 调度
linux中进程与cpu核的绑定
linux中进程与cpu核的绑定
430 0
|
Shell Go
通过安装GVM 安装GO 操作步骤
通过安装GVM 安装GO 操作步骤
498 0
|
算法 Linux 调度
深度解析:Linux内核的进程调度机制
【4月更文挑战第12天】 在多任务操作系统如Linux中,进程调度机制是系统的核心组成部分之一,它决定了处理器资源如何分配给多个竞争的进程。本文深入探讨了Linux内核中的进程调度策略和相关算法,包括其设计哲学、实现原理及对系统性能的影响。通过分析进程调度器的工作原理,我们能够理解操作系统如何平衡效率、公平性和响应性,进而优化系统表现和用户体验。
|
Kubernetes 负载均衡 监控
从零开始入门 K8s | Kubernetes 网络模型进阶
导读:本文将基于之前介绍的基本网络模型,进行更深入的一些了解,希望给予读者一个更广更深的认知。首先简单回顾一下容器网络的历史沿革,剖析一下 Kubernetes 网络模型的由来;其次会剖析一个实际的实现(Flannel Hostgw),展现了数据包从容器到宿主机的变换过程;最后对于和网络息息相关的 Servcie 做了比较深入的机制和使用介绍,通过一个简单的例子说明了 Service 的工作原理。
从零开始入门 K8s | Kubernetes 网络模型进阶
|
监控 Cloud Native API
带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析(六)
带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析
|
JSON 编解码 JavaScript
IM通讯协议专题学习(五):Protobuf到底比JSON快几倍?全方位实测!
本篇将以Protobuf为基准,对比市面上的一些主流的JSON解析库,通过全方位测试来证明给你看看Protobuf到底比JSON快几倍。
930 0
IM通讯协议专题学习(五):Protobuf到底比JSON快几倍?全方位实测!
|
JSON Go 数据格式
Go json omitempty关键字
Go json omitempty关键字
347 0