防抖和节流

前言

在笔者之前的面试中,基本上每次都会被问到防抖和节流是什么意思,讲道理虽然对这个概念大致有一些理解,但是一直都有点模模糊糊的,所以在这里记录一下,以便回顾

防抖

概念:触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间
顾名思义,防抖就是防止抖动,简单的解释就是说任务执行的唯一性,就是说在一个任务执行之前,无论你下达多少次的命令,任务都只会执行一次,最比较常见的就是延时任务防抖实现,请看下面的示例

var time = null;
function handleClick() {//执行任务的函数
   if(time != null) {
      clearTimeout(time);
      time = null;
    }
   time = setTimeout(() => {
      //这里执行一个任务
  },3000)
}

<button onclick="handleClick()">执行任务</buton>

//每次点击执行任务按钮之后,都会把之前的计时器清空,里面的任务也就不会执行,然后重新去建立一个任务,也就是任务的唯一实现

节流

概念:高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率
顾名思义,节流就是节约开支,简单的解释就是说在一定的时间内,无论我们怎么发布任务,任务也只会执行一次,当然,这个条件维度不一定是时间,也可以是其他的,比如滚动触发事件(只有滚动的距离达到一定的长度才会触发),请看示例

var time = null;
function handleClick() {//执行任务的函数
   if(time != null) { return }
   time = setTimeout(() => {
      //这里执行一个任务
      clearTimeout(time);
      time = null;
  },3000)
}

<button onclick="handleClick()">执行任务</buton>

总结:其实防抖和节流的区别就是维度不一样,一个是以执行次数为条件,一个是以时间间隔为条件,当然了,他们存在的目的都是为了提高我们的程序性能

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在前端开发的过程中,我们经常会需要绑定一些持续触发的事件,如 resize、scroll、mousemove 等等...
    meng_281e阅读 196评论 1 0
  • 防抖和节流在前端应用非常多,如搜索框,查询等操作,如何减少一些无效的操作,减轻服务器的压力,如一些持续发生的事件,...
    老鼠AI大米_Java全栈阅读 511评论 0 1
  • 本文摘自这里,通俗易懂。防抖和节流在前端和客户端开发中经常会用到,而且适用场景还挺多,大多数成熟的第三方库都有提供...
    nuannuan_nuan阅读 856评论 0 1
  • 定义 在JS里,有一些事件是很容易频繁触发的,比如窗口的resize、scroll、鼠标的onmousemove等...
    Rudy_Ran阅读 186评论 0 2
  • 定义 在JS里,有一些事件是很容易频繁触发的,比如窗口的resize、scroll、鼠标的onmousemove等...
    瑞哦利阅读 312评论 0 0