往事不堪回首

犹记在很久之前的某次面试中,和那技术大哥谈的正欢呢,冷不防他来了句:谈一谈防抖和节流吧。

抹了把凉汗,我用颤抖的、不自信的语气回答道:呃,防抖就是应该是防止抖动的意思,节流大概是节省流量吧……

当时,我的心理活动是这样的:

当年心理素质是真的差,这个坎没翻过去,最后的结果就是:

知耻而后勇

以我不服输的性格,这场子必须找回来!

经过这几年的勤学苦练,我现在自信简直爆棚,如果,时光能够倒流,我相信我可以做到这样:

今天,我要跟「防抖节流」来做个了断,以证明现在的我已不是过去的我,用一个成语来形容,那就是——今非昔比!

知己知彼,方能百战百胜

古老的法则告诉我们:欲要消灭敌人,必须先要了解敌人。

防抖(debounce)

从字面意思来看,防抖就是防止抖动的意思。

举个例子:比如说你对象要你帮她拍美照, 结果因为你加班太多身体虚,手抖的厉害,拍出来的照片模糊不清,为免受雷霆之怒,你就需要想想办法。首先,分析一下照片模糊的原因:

  • 手抖的厉害(1s 十几次!!??)
  • 导致相机不能完美的捕捉画面
  • 所以照片模糊。

看来,「手抖」才是罪魁祸首啊,那想个办法解决手抖的问题就好了:找一个支架,让它代替手来支撑相机,这样就不「抖」了!

这操作,让我不得不对你竖起大拇指:

想想看上面这个例子本质上是解决了什么问题?

我觉得应该是解决了**「抖动频率」**的问题——手拿着,一秒会抖好多次;可支架撑着,好长时间都未必会抖一次。可谓是「人不如架」啊!

支架起的就是防抖的作用。

回到我们今天的正题上,来看一下防抖的常规解释:当函数被连续调用时,该函数并不执行,只有当其全部停止调用超过一定时间后才执行1次。

节流(throttle)

现在回头看看我当年的回答,还是摸到了一点门槛(手动缓解尴尬,嘿嘿)。

再来个例子:家里的水龙头,即使你开的再大,它在单位时间里能流出的水就那么多,因为水龙头的规格限制了它单位时间里的流量。

水龙头起到的就是节流的作用。

节流的常规解释:规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效

常用场景

防抖节流一般用于以下场景:

  • 浏览器窗口的缩放,页面的滑动触发的 resizescroll
  • 鼠标事件 onmousemoveonmousedownonmouseup
  • 输入框录入触发的 keyupkeydown……

原理

防抖是维护一个计时器,规定在 delay 时间后触发函数,但是在 delay 时间内再次触发的话,都会清除当前的 timer 然后重新设置超时调用,即重新计时。这样一来,只有最后一次操作能被触发。

节流是通过判断是否到达一定时间来触发函数,若没到规定时间则使用计时器延后,而下一次事件则会重新设定计时器。

区别

函数防抖是某一段时间内只执行一次,而函数节流是间隔时间执行,不管事件触发有多频繁,都会保证在规定时间内一定会执行一次真正的事件处理函数。

总结

今天就先来了解一下「防抖」和「节流」的基础知识,详细代码实现待后续。

~

~
未完待续

学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!

大家好!我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教!

知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!

戏说前端 JavaScript 之『防抖节流』基础知识相关推荐

  1. 前端 JavaScript 之『防抖』的简单代码实现

    前戏

  2. 前端 JavaScript 之『节流』的简单代码实现

    前戏 首先,总结一下上一篇文章--<前端 JavaScript 之『防抖』的简单代码实现>的内容:「防抖」就是在高频率触发事件停止触发后,延时执行某个处理逻辑. 防抖虽然在一定程度上对性能 ...

  3. 前端地图分类(包括坐标系,GIS基础知识,2D与3D地图结构划分)

    前端地图分类(包括坐标系,GIS基础知识,2D与3D地图结构划分) 经度:longitude(lng, 0 < lng < 180) 纬度:latitude(lat, 0 < lat ...

  4. 一年前端开发工程师简历_2017年是前端开发人员应该回头并掌握基础知识的一年...

    一年前端开发工程师简历 by Artem Sapegin 通过Artem Sapegin 2017年是前端开发人员应该回头并掌握基础知识的一年 (2017 is the year that front ...

  5. 前端程序员容易忽视的一些基础知识

    基础数据结构与算法 现在有两个不同的JSON,比较复杂,可以参考这里的DEMO中返回的JSON.要比较它们的差异,除了用现成的工具如 beyond compare 以外,如果我们的机器上没有安装这个工 ...

  6. 前端开发入门:html和css基础知识回顾2

    HTML+CSS基础知识 1.对WEB标准以及W3C的理解与认识 标签闭合.标签小写.不乱嵌套.提高搜索机器人搜索几率.使用外 链css和js脚本.结构行为表现的分离.文件下载与页面速度更快.内容能被 ...

  7. JavaScript模块化开发(一)基础知识

    2019独角兽企业重金招聘Python工程师标准>>> 随着前段JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理 ...

  8. 前端学习(初识HTML 上)——基础知识和基本标签

    前端学习之初识HTML 一.HTML基础知识 1.html定义 2.html特点 3.html标签 4.html基础结构 (1)<head></head>中的<meta& ...

  9. 前端学习之JavaScript DOM以及DOM操作的基础知识

    在了解了javascript的语言基础和特性后 javascript真正大放光彩的地方来了--这就是javascript DOM Javascript DOM DOM(Document Object ...

最新文章

  1. Ubuntu终端命令行不显示颜色
  2. 2.1.4 进程之间的通信(共享通信、消息传递、管道通信)
  3. SAP document builder一些常见问题的解答
  4. umask命令:设置文件的默认权限掩码
  5. stc15w4k32s4管脚图_STC15W4K32S4系列
  6. php mysql 查询数据库表结构_mysql查询数据库下的表结构?
  7. 《新概念模拟电路》系列电子书下载
  8. 内存映射技术(共享内存)
  9. WPS表格简单入门_我的笔记_一些常用操作
  10. javascript案例,专辑前6名
  11. python 组合优化 回撤最小_【研究】如何用python实现Markowitz投资组合优化
  12. 读《周一清晨的领导课》有感
  13. html 中长单词换行问题
  14. 【Java系列】(四)Java多线程---线程安全
  15. 2022-Arch安装(详细)
  16. 穿上钢铁侠战衣变身钢铁侠,现代表示我做到了!
  17. web前端布局篇(切图)
  18. C++控制台鼠标化操作
  19. python中flatten_Python中flatten( ),matrix.A用法说明
  20. .NET的资源并不限于.resx文件(二)

热门文章

  1. 使用idea进行Maven打包异常:Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war
  2. 此图片来自微信公众平台未经允许不可引用 解决方法
  3. Homebrew:无法符号链接,/ usr / local / bin不可写[关闭]
  4. 使用Git版本控制查看文件的更改历史记录
  5. win11华为的电脑管家错误怎么办 Windows11华为电脑管家错误的解决方法
  6. Java代码TkMyBatis通用Mapper中新增数据时同时获取自增主键ID,与适用uuid 做主键时获取 id
  7. activiti bpmn 安装不上_OTC弧焊工作站问题集-Win7 64位系统安装Step7 MicroWIN
  8. 2089. 找出数组排序后的目标下标
  9. THREEJS - 模型居中
  10. opencv之waitKey()与waitKeyEx()的区别