歪式絮叨:原本打算只用一篇文章总结下防抖和节流的,但是写着写着发现挺有意思的。所以准备会分成 3-4 篇来写了,单独的防抖和节流的实现,然后在去分享一下知名库的源码。今天先跟歪马一起看看防抖的实现吧。其他内容敬请期待~!

歪老师:“马同学,防抖和节流你知道吗?起来说一下。”

马同学:“老师,我不知道呀,都没听说过。”

歪老师:“好吧,那今天我们就先来讲讲防抖吧。先从基本的概念以及使用场景说起”。

一、概念

防抖 debounce 和节流 throttle 的概念并不是 JS 所特有的。它们是在对函数持续调用时进行不同控制的两个概念。今天我们先介绍防抖。

防抖是为了避免用户无意间执行函数多次。比如有些用户喜欢在点击的时候使用 double click 双击,或者就是手抖连续点了两下,这就可能会导致一些意想不到的问题。

通过防抖可以在事件触发一定时间后没有再次触发同一事件时,再去执行相关的处理函数。

就好比你去菜市场买菜,到某个小摊上开始挑菜,接连挑好一袋又一袋放在摊主面前,摊主并不会每一袋都给你结账,而是会等着问你:“还要别的吗?”,等你确认完不要了,才会结账。

你可以通过歪马写的这个 demo 查看常规无限制函数调用和防抖(节流)之后的可视化对比,完整 demo 地址如下:

codesandbox.io/s/yibubupia…。

二、作用&应用场景

在具体实现之前,我们先简单了解一下防抖和节流的作用以及在哪些业务中会用到。

防抖和节流(这里先包含它吧)主要能够给我们带来以下好处:

优化用户体验:适时反馈,避免 UI 渲染阻塞,浏览器卡顿

提升页面性能:避免页面渲染卡顿,减少服务器压力,防范恶意触发

防抖的应用场景有以下几个方面:

输入框内容联想 --> 适时反馈、减少服务器压力

window.resize --> 避免 UI 渲染阻塞,浏览器卡顿

提交表单 --> 减少服务器压力,防范恶意触发

歪老师:“概念我们就介绍到这,下面我们来看看该如何实现。”

三、如何实现防抖

歪老师:“防抖可以通过计时器来实现,通过setTimeout来指定一定时间后执行处理函数,如果在这之前事件再次触发,则清空计时器,重新计时。”

function debounce(fn, wait) {

let timerId = null;

return function(...args) {

if (timerId) clearTimeout(timerId);

timerId = setTimeout(() => {

fn.call(this, args);

}, wait);

};

}

复制代码

歪老师:“上面就是比较基础的debounce功能的实现,同学们都听懂了吧?

马牛羊同学:“听懂了。”

歪老师:“好,下面我们来逐步拓展。马同学,在这个基础上让你去实现首次触发时立即执行一次函数,你会怎么实现?”

马同学:“老师,什么场景下才需要在首次就执行呢?”

歪老师:“

防抖c语言,花式解说防抖函数debounce的实现相关推荐

  1. java接口防抖_花式解说防抖函数debounce的实现

    歪式絮叨:原本打算只用一篇文章总结下防抖和节流的,但是写着写着发现挺有意思的.所以准备会分成 3-4 篇来写了,单独的防抖和节流的实现,然后在去分享一下知名库的源码.今天先跟歪马一起看看防抖的实现吧. ...

  2. 防抖函数Debounce实现

    实现原理就是利用定时器,函数第一次执行时设定一个定时器,之后调用时发现已经设定过定时器就清空之前的定时器,并重新设定一个新的定时器,如果存在没有被清空的定时器,当定时器计时结束后触发函数执行. 手写一 ...

  3. debounce实现 js_javascript防抖函数debounce详解

    定义及解读 防抖函数 debounce 指的是某个函数在某段时间内,无论触发了多少次回调,都只执行最后一次.假如我们设置了一个等待时间 3 秒的函数,在这 3 秒内如果遇到函数调用请求就重新计时 3 ...

  4. R语言使用download.file函数下载网络文件到本地(Download File from the Internet)

    R语言使用download.file函数下载网络文件到本地(Download File from the Internet) 目录 R语言使用download.file函数下载网络文件到本地(Down ...

  5. R语言stringr包str_dup函数字符串多次复制实战

    R语言stringr包str_dup函数字符串多次复制实战 目录 R语言stringr包str_dup函数字符串多次复制实战 #导入stringr包 #仿真数据

  6. R语言stringr包str_count函数计算字符串匹配个数实战

    R语言stringr包str_count函数计算字符串匹配个数实战 目录 R语言stringr包str_count函数计算字符串匹配个数实战 #导入stringr包 #仿真数据

  7. R语言使用R原生函数plot和lines可视化线图、并使用lty参数自定义线条类型、lwd自定义设置线条的粗细、col参数自定义线条颜色(Change R base plot line types)

    R语言使用R原生函数plot和lines可视化线图.并使用lty参数自定义线条类型.lwd自定义设置线条的粗细.col参数自定义线条颜色(Change R base plot line types) ...

  8. R语言ggpubr包ggsummarystats函数可视化分组条形图(自定义分组颜色、添加抖动数据点jitter、误差条)并在X轴标签下方添加分组对应的统计值(样本数N、中位数、四分位数的间距iqr)

    R语言ggpubr包ggsummarystats函数可视化分组条形图(自定义分组颜色.添加抖动数据点jitter.误差条error bar)并在X轴标签下方添加分组对应的统计值(样本数N.中位数med ...

  9. R语言使用t.test函数计算两组独立数据的t检验(Independent t-test)

    R语言使用t.test函数计算两组独立数据的t检验(Independent t-test) 目录 R语言使用t.test函数计算两组独立数据的t检验(Independent t-test) #仿真数据

最新文章

  1. 由于不知线程池的bug,某Java程序员叕被祭天
  2. 谷歌新模型刷新ImageNet纪录,第一作者是上海交大毕业生谢其哲
  3. ORACLE AWR 和 ASH
  4. VS Code 1.18版本更新内容整理(2017年10月 October 2017)
  5. python 中参数*args, **kwargs
  6. python编程入门书籍-关于 Python 的经典入门书籍有哪些?
  7. 数据结构折半查找例题_查找-第9章-《数据结构题集》习题解析-严蔚敏吴伟民版...
  8. 基于matlab的捷联惯导算法编程(二)
  9. CPAL脚本自动化测试 ———— Test Report系列函数及使用
  10. Python函数中定义函数
  11. bootstrap 检验 法 原理_三种中介效应检验方法及操作步骤 - spssau
  12. python编辑函数求n阶乘fact_python中fact函数的用法
  13. B2B、C2C、B2C是什么意思
  14. GPT-3写了一篇论文
  15. 【NDVI:注意力机制:遥感图像】
  16. 名门正派的设计,与歪门邪道的产品
  17. (2)ubuntu 中安装epics 的额外插件---asyn 以及 streamdevice
  18. Collections.sort对List排序的两种方法
  19. 电路图部分原件的画法
  20. Win10常用的快捷键和触摸板操作合集

热门文章

  1. 【博客写作】写博客的好处
  2. mysql执行计划命令_【MySQL】EXPLAIN命令详解--解释执行计划
  3. 苹果 M2 处理器可能要来了
  4. 实时排名算法简单分析
  5. 海王星局域网客户机流量监视器服务器端——监视流量,禁止BT
  6. SetEvent/ResetEvent
  7. HTML——6(表格)
  8. 六大搜索引擎同时推送软件 seo引蜘蛛专用工具软件
  9. 使用SpringMVC接收前端数据的方式总结(SpringMVC)
  10. 类 Pascal语言词法分析实验(简易版)