背景

开发过程中我们会遇到一些场景,事件频繁被触发,导致频繁的DOM操作等,导致UI卡顿 甚至浏览器崩溃等。

1、window对象的resize、scroll 事件

2、拖拽时的mousemove事件

3、input的change、keyup事件等

4、游戏中的mousedown、keydown事件

5、发送请求按钮为了防止用户不停的点击

解决方案

这些场景我们会对他做节流处理,也就是说一段时间内触发的事件我们的函数只执行一次。throttle和debounce 都可以帮我们在一段时间内防止函数被多次调用。下面来聊一下debounce 和 throttle 这两种解决方案。

先查了一下这两个单词的英文意思,debounce:去抖;防反跳, throttle: 节流。

debounce:

当调用动作n毫秒后,才会执行该动作。如果这n毫秒内又调用该动作,则重新计算时间。

例如:一个点击事件,用了debounce,点击事件被执行直到你停止点击 n毫秒后。

throttle:

当调用动作被触发,立即执行,但是这n毫秒内,再次触发不会被执行。也就是说一个执行周期(n毫秒)内最多只能执行一次。

举个?:

页面存在一个按钮,点击时会触发点击事件。用throttle和debounce 做优化,设置执行周期为1000ms。然后不停的点击按钮。则:

debounce(handleClick, 1000) //只会执行一次,在最后一次点击完1000ms后

throttle(handleClick, 1000) //第一次点击立即执行一次,1000ms后如果再被点击则再执行

使用场景:

debounce:

1、input change时 自动发送ajax请求

2、window resize时重新计算样式或布局

throttle:

1、scroll 时更新页面

2、防止用户疯狂点击按钮,而触发事件

平时比较常用还是throttle。

debounce 与throttle相关推荐

  1. 白话debounce和throttle

    遇到的问题 在开发过程中会遇到频率很高的事件或者连续的事件,如果不进行性能的优化,就可能会出现页面卡顿的现象,比如: 鼠标事件:mousemove(拖曳)/mouseover(划过)/mouseWhe ...

  2. Debounce 和 Throttle 的原理及实现

    在处理诸如 resize.scroll.mousemove 和 keydown/keyup/keypress 等事件的时候,通常我们不希望这些事件太过频繁地触发,尤其是监听程序中涉及到大量的计算或者有 ...

  3. debounce和throttle

    性能和速度是程序的敌人,以致于每一个优秀的程序员都在孜孜不倦的提升软件的性能和速度,从而提升产品的用户体验. 下面介绍的是debounce和throttle,这两种技术能够改善程序的性能,它们非常相似 ...

  4. debounce vs throttle

    debounce vs throttle debounce假设你正在乘电梯上楼,当电梯门关闭之前发现有人也要乘电梯,礼貌起见,你会按下开门开关,然后等他进电梯:如果在电梯门关闭之前,又有人来了,你会继 ...

  5. 浅析Debounce 与 Throttle的区别

    文章目录 概述 Debounce 瞬时响应or延迟响应 举例与注意事项 Throttle 定义 用法举例 参考文章 这两天在学习前端知识,在Vue的官方教程中看到了这两个概念,查阅相关资料后,做以下整 ...

  6. 前端间隔查询的两种方法:Debounce和Throttle

    Debounce 中文名:防抖.在开始操作了之后,那么只有在一段 delay 时间段后不再有操作了,才执行操作. Throttle 中文名:节流.在开始操作之后,在 delay ms 内只会做一次.会 ...

  7. debounce与throttle区别

    在2011年,Twitter网站曾爆出一个问题:在主页往下滚动时,页面会变得缓慢以致没有响应.John Resig发表了一篇文章< a blog post about the problem&g ...

  8. debounce、throttle、useDebounce、useThrottle

    直接使用lodash的debounce会出现以下报错信息 This synthetic event is reused for performance reasons. If you're seein ...

  9. throttle与debounce的区别

    前几天看到一篇文章,我的公众号里也分享了<一次发现underscore源码bug的经历以及对学术界拿来主义的思考>具体文章详见,微信公众号: 文中讲了大家对throttle和debounc ...

最新文章

  1. java中字符与字节的编码关系
  2. 省市县级联查询无刷新(转)
  3. 《实施Cisco统一通信管理器(CIPT2)》一1.6 拨号计划方面面临的挑战
  4. 除了数据属性,Vue 实例还提供了一些有用的实例属性与方法。它们都有前缀 $,以便与用户定义的属性区分开来。
  5. 记录一个需求:折线图,要求指定年份每一天的记录
  6. 计算机网络学习笔记-1.2.3第一章总结
  7. dedeCMS 静态页面的倒计时插件(原生VS自定义)
  8. linux 中断 c语言程序,linux驱动之中断处理过程C程序部分
  9. HTML将广告关闭的JS代码,原生js对联广告代码制作浮动固定层可关闭对联广告横幅...
  10. java 中文繁体转换简体
  11. css3 cale()属性介绍以及自适应布局使用方法
  12. Google谷歌地图基础
  13. linux常用重启命令,linux常用关机和重启命令
  14. 电视为何降价至200元依然没人买?爱奇艺给出了答案
  15. 计算机丢失fine,FineRecovery(文件恢复删除)4.29
  16. VS Code中常用插件
  17. hiveserver2 和beeline_Beeline连接Hiveserver2错误
  18. 微软 Azure人工智能认知服务打造语音提醒喝水助手(带源码和演示地址)
  19. Android新的网络请求框架volley源码解释及示例
  20. uview u-popup设置背景透明

热门文章

  1. 拉勾第一阶段模块一作业
  2. 1-02 C++起步: 用结构组织数据 —— 数据封装初步
  3. java集合UML类图 总览
  4. 机器学习之:流形与降维概述
  5. 微信怎么没有移车服务器,交警推出微信移车系统 发微信移车5秒有回应
  6. HDMI的CEC是如何控制外围互联设备的
  7. 前端网页自动获取域名,Http还是https
  8. Java 生成 Https 证书
  9. 西浦计算机研究生,西浦这个女生,竟然拒绝了哈佛研究生录取通知书
  10. HorizontalScrollView重置滑动位置问题