首页 > 其他分享 >js-防抖和节流的区别及实现

js-防抖和节流的区别及实现

时间:2023-04-22 23:22:33浏览次数:45  
标签:触发 防抖 节流 timer js delay 函数

函数防抖(debounce):触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间。
函数节流(throttle):高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率。
函数节流(throttle)与 函数防抖(debounce)都是为了限制函数的执行频次,以优化函数触发频率过高导致的响应速度跟不上触发频率,出现延迟,假死或卡顿的现象。

1、防抖(debounce)
实现方式:每次触发事件时设置一个延迟调用方法,并且取消之前的延时调用方法
缺点:如果事件在规定的时间间隔内被不断的触发,则调用方法会被不断的延迟
2、节流(throttle)
实现方式:每次触发事件时,如果当前有等待执行的延时函数,则直接return
**防抖:将多次操作合并为一次操作进行。原理是维护一个计时器,规定在delay时间后触发函数,但是在delay时间内再次触发的话,就会取消之前的计时器而重新设置。这样一来,只有最后一次操作能被触发。
**节流:使得一定时间内只触发一次函数。原理是通过判断是否有延迟调用函数未执行。

区别:
节流不管事件触发有多频繁,都会保证在规定时间内一定会执行一次真正的事件处理函数,而防抖只是在最后一次事件后才触发一次函数。比如在页面的无限加载场景下,我们需要用户在滚动页面时,每隔一段时间发一次ajax请求,而不是在用户停下滚动页面操作时才去请求数据。这样的场景,就适合用节流技术来实现。

/* 防抖 */
function debounce(func, delay) {
  let timer = null;
  return function () {
    if (timer) {
      clearTimeout(timer);
      timer = null;
    }
    timer = setTimeout(() => {
      func(...arguments);
    }, delay);
  };
}

/* 节流 */
function throttle(func, delay) {
  let time = null;
  return function () {
    let args = Array.from(arguments);
    if (time === null) {
      time = setTimeout(() => {
        func(...args);
        clearTimeout(time);
        time = null;
      }, delay);
    }
  };
}

 

标签:触发,防抖,节流,timer,js,delay,函数
From: https://www.cnblogs.com/huangchengpei/p/17344429.html

相关文章

  • keydb 提供的ModJS 模块
    keydb提供了ModJS模块,可以支持js开发redis扩展,很方便,同时也支持了简单的npm模块能力(但是也有不少限制)以下是一个参考使用环境准备docker-compose注意npm模块需要到redis的work目录(具体如下docker的是/data) version:'3'services:keydb:......
  • JSP程序设计_全程_老师笔记
    ​2.21笔记 一、网页的组成元素      网页一般是由内容、样式和布局、动效三部分组成的。            内容(HTML)主要指的是页面的文字、按钮button、图片img、视频video、音频audio等等            样式和布局(CSS)指的是内容的大小、颜......
  • 【面试题】对 JSON.stringify()与JSON.parse() 理解
    大厂面试题分享面试题库前后端面试题库(面试必备)推荐:★★★★★地址:前端面试题库  web前端面试题库VSjava后端面试题库大全重新学习这两个API的起因在本周五有线上的项目,16:30开始验证线上环境。开始都是顺顺利利,一帆风顺。大概17:50左右,我正在收拾东西。准备下班去王者峡......
  • mybatis-plus使用聚合函数报错---------net.sf.jsqlparser.parser.ParseException: En
    错误日志: Causedby:net.sf.jsqlparser.parser.ParseException:Encounteredunexpectedtoken:"with""WITH"atline62,column20.Wasexpectingoneof:"&""::"";""<<&q......
  • 【面试题】4月面经 前端常考JS编程题
     大厂面试题分享面试题库前后端面试题库(面试必备)推荐:★★★★★地址:前端面试题库  web前端面试题库VSjava后端面试题库大全1、柯里化柯里化作用是拆分参数实现的核心思想是 收集参数递归中去判断当前收集的参数和函数的所有入参是否相等,长度一致即可执行函数运算面试题......
  • Introduction to WebGL 3D with HTML5 and Babylon.js
    Explore3Dbasics,andtakealookat3Dwithouthardware(creatingasoftwareengine).[05:45]-Understanding3DBasicsviaasoftengine[09:49]-UnderstandingtheTransformationpipeline[20:26]-Itsallabouttriangles[31:42]-MovingfromCPUto......
  • 深入 NODEJS 源码探究 CPU 信息的获取与利用率计算
    在Linux下我们通过top或者htop命令可以看到当前的CPU资源利用率,另外在一些监控工具中你可能也遇见过,那么它是如何计算的呢?在Nodejs中我们该如何实现?带着这些疑问,本节会先从Linux下的CPU利用率进行一个简单讲解做一下前置知识铺垫,之后会深入Nodejs源码,去探讨如何......
  • 微信JS-SDK出现“invalid signature”的问题时该如何解决
    最近我在帮助前端生成微信JS-SDK分享签名时,遇到了一个问题,即wx.config初始化一直报invalidsignature的错误,我想总结一下我排查这个问题的过程。官方文档中已经说了详细介绍了排查过程,如下图所示: 校验工具校验签名过程首先我在微信提供的签名校验工具中比对了接口生成......
  • JSP的缺点
    JSP的缺点1.书写麻烦,特别是复杂的页面。2.因为JSP里面有java代码和其他的代码,所以阅读麻烦。3.因为前端代码和java代码都放在一起,所以会造成前端人员不会java,而后端人员又不精通HTML。**JSP现在逐步被=HTML+AJAX代替**最先使用Servelet写,然后又用JSP,再然后用Servele......
  • JSP简介
    1.什么是JSPJSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。2.JSP的特点能以模板化......