防抖和节流

作者: Harlan_Zhang | 来源:发表于2020-01-02 10:08 被阅读0次

前言

防抖和节流算是非常普及的概念了,不止在前端,甚至不止在编程领域,许许多多的地方都能用到这两个概念,这篇文章主要总结分享一下我自己在JS中对这两个概念的代码实现。

防抖

防抖顾名思义就是防止或消除抖动,我第一次接触这个概念还是是当初大学学单片机的时候。在前端的领域里面,这个概念可以理解为一个高频率的事件只有在停止触发一定时间后才会执行对应的处理函数,比较常见的场景就是文本框输入时触发的事件。比如输入文字自动搜索的功能,我们在搜索时一般希望输入完一个词组或一个句子后自动进行搜索,而不是每输入一个字或是一个字面后就搜索一次,这里就需要应用到防抖。只有用户停止输入后才会执行事件
代码也很简单:

function debounce(fn, time) {
  let timer = null
  return () => {
    if(timer) {
      clearTimeout(timer)
    }
    timer = setTimeout(fn, time)
  }
}

在这里只有事件停止触发一定时间后才会执行处理函数,如果等待时间内又一次触发时间,那么会重新计时。

节流

节流在这里也是限制高频事件的触发,节流规定了一个单位时间,在这个单位时间内只能触发一次。
防抖和节流的区别用文本框输入文字来演示的话,假如时间都设置为1s,用户不断输入文字,防抖的话是停止输入1s后函数执行,只执行一次。节流则是在用户输入期间,每隔一秒执行一次函数,可能会执行多次。

function throttle(fn, time) {
  let oldTime = 0
  return () => {
    const newTime = new Date()
    if (newTime - oldTime >= wait) {
      fn()
      oldTime = newTime
    }
  }
}

小结

在这里防抖和节流只给出了最简单的代码,如果实际的函数更加复杂,需要考虑到执行上下文的话,那就要用到call或者apply函数来指定this的指向。这个到时候就需要根据实际情况具体分析了。

相关文章

  • 谈谈js中的节流和防抖函数

    关于节流和防抖,这篇文章说的很好了,深入lodash源码分析防抖和节流深入篇 | Lodash 防抖和节流是怎么实...

  • JavaScript防抖和节流

    1. 认识防抖和节流 1.1. 对防抖和节流的认识 防抖和节流的概念其实最早并不是出现在软件工程中,防抖是出现在电...

  • 前端性能优化-浅谈js防抖和节流

    浅谈js防抖和节流

  • Javascript 基础

    1、函数防抖和函数节流 【《javascript高级程序设计》里,函数节流是这里讲的函数防抖。】函数防抖: 在事件...

  • js 防抖 节流

    节流 防抖1 防抖2

  • 2019-03-27

    js的防抖和节流 据我所知防抖和节流都是为了优化作用,减轻浏览器和服务端的负担,防抖和节流俩个的英文要记住: de...

  • js的防抖和节流

    js的 防抖(debounce)和 节流(throttle ) 防抖和节流一般用于高频触发事件,属于浏览器性能优化...

  • 手写防抖和节流函数实现

    1. 认识防抖和节流函数 防抖和节流的概念其实最早并不是出现在软件工程中,防抖是出现在电子元件中,节流出现在流体流...

  • 实现防抖和节流

    一、认识防抖和节流函数 防抖和节流的概念其实最早并不是出现在软件工程中,防抖是出现在电子元件中,节流出现在流体流动...

  • 2019-04-24关于节流和防抖

    节流: 应用场景: 防抖: 应用场景: 1.节流 2.防抖

网友评论

    本文标题:防抖和节流

    本文链接:https://www.haomeiwen.com/subject/pwmnoctx.html