JS中节流和防抖函数的实现及区别示例

JS中的节流和防抖函数是常见的性能优化方案,它们可以有效减少大量事件触发时造成的性能浪费。接下来我将详细讲解它们的实现方法及区别,并提供两个示例说明。

一、防抖函数

防抖函数是指在事件触发n秒后,才会执行回调函数,如果在n秒内又触发了该事件,则重新计算时间。这个操作就像是“弹簧被压下去后在n秒后才能弹起来”。

防抖函数的实现方法如下:

function debounce(fn, delay) {
  let timeoutID
  return function() {
    const args = arguments
    const context = this
    clearTimeout(timeoutID)
    timeoutID = setTimeout(function() {
      fn.apply(context, args)
    }, delay)
  }
}

上述防抖函数的实现方法的意思是:每当事件被触发时(比如说用户滚动事件、点击事件、输入框输入事件等等),会清除之前延时执行的回调函数的定时器,然后再设置一个新的延时计时器。如果在delay的时间内再次触发该事件,定时器会被清除,重新计算时间,不会执行回调函数,直至n秒后,定时器未被清除,执行回调函数。

以下是一个防抖函数的示例说明:

function handleClick() {
  console.log('点击了')
}
const button = document.querySelector('button')
button.addEventListener('click', debounce(handleClick, 1000))

上述代码中,给按钮添加点击事件,每次点击后一秒内不会再次触发该事件,防止用户多次点击导致不必要的重复操作。

二、节流函数

节流函数是指当事件被触发时,频率限制在一定时间内只执行一次回调函数。这个操作就像是“水龙头在一定时间内按一次只能供应一份水”。

节流函数的实现方法如下:

function throttle(fn, delay) {
  let lastTime = 0
  return function() {
    const nowTime = Date.now()
    if(nowTime - lastTime > delay) {
      fn.apply(this, arguments)
      lastTime = nowTime
    }
  }
}

上述节流函数的实现方法的意思是:每当事件被触发时,首先获取该事件的当前时间,如果当前时间与上一次事件触发时间间隔超过了指定的时长delay,则执行回调函数,否则忽略该次事件的触发。

以下是一个节流函数的示例说明:

function handleScroll() {
  console.log('滚动了')
}
window.addEventListener('scroll', throttle(handleScroll, 1000))

上述代码中,给window对象添加了滚动事件,在一秒内最多只会触发一次该事件的回调函数,减少了因用户的快速滑动导致的重复操作,使页面更加流畅。

三、区别与应用场景

防抖与节流的区别在于:

  • 防抖函数是在一定时间内多次触发事件,只执行最后一次事件的回调函数,可以防止频繁的触发无意义的操作;
  • 而节流函数则是在一定时间内限制事件触发次数,使回调函数能够以固定且合适的频率执行,适用于一些需要稳定执行而忽略间隔时间的场景。

因此,应用场景不同,任选其一取决于实际需求。例如,用户搜索时,防抖能够减少请求次数,提高搜索效率,而鼠标移动时的实时监测事件触发则需要使用节流,限制事件触发频率,减少浏览器性能消耗,保持页面流畅。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中节流和防抖函数的实现及区别示例 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JavaScript严格模式use strict的介绍

    JavaScript中的严格模式指的是在代码的开头使用’use strict’;语句,以告诉浏览器或解释器在解析JavaScript代码时使用严格的解析方式。使用严格模式可以帮助开发者发现潜在的错误,从而使代码更加可靠、安全和易于维护。 下面是关于JavaScript严格模式的介绍和两个示例说明: 介绍 在使用’use strict’;语句之后,以下情况都会…

    JavaScript 2023年5月28日
    00
  • js的toUpperCase方法用法实例

    当你需要将 JavaScript 字符串中的所有字符都转换为大写时,你可以使用 toUpperCase() 方法。下面是关于如何在 JavaScript 中使用toUpperCase() 方法的完整攻略。 Markdown 格式文本 首先,您需要了解如何在 Markdown 中编写代码块。在代码块之间包含代码时,您可以使用反引号引用代码块: // 这里是代码…

    JavaScript 2023年6月10日
    00
  • javascript(js) join函数使用方法介绍

    JavaScript Join函数使用方法介绍 什么是JavaScript Join函数? JavaScript的Join()函数是一种字符串方法,它把数组中的所有元素转换为一个字符串,将它们以指定的分隔符组合成一个新的字符串。Join函数的语法如下: array.join(separator) 其中separator是可选参数,表示用来分隔元素的字符串,默…

    JavaScript 2023年5月27日
    00
  • FileZilla无法连接服务器怎么办?

    FileZilla无法连接服务器怎么办? 在使用FileZilla连接服务器时,有时可能会遇到无法连接服务器的问题。以下是可能导致该问题的一些原因和解决方法: 原因一:服务器地址或端口号错误 在连接服务器时,首先要确认您输入的服务器地址和端口号是否正确。请注意,端口号可能会因服务器协议而异(例如,FTP的默认端口号为21,而SFTP的默认端口号为22)。 解…

    JavaScript 2023年5月28日
    00
  • Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    JQuery是一种JavaScript库,其中包括了许多有用的工具方法,其中包括四种数据请求方法:$.get(), $.post(), $.ajax(), $.getJSON()。以下是它们的详细讲解: $.get(url, data, success, dataType) url:请求的URL地址 data:发送给服务器的数据(可以省略) success:…

    JavaScript 2023年5月19日
    00
  • 分离式javascript取当前element值的代码

    下面是关于“分离式javascript取当前element值的代码”的攻略。 什么是分离式javascript 分离式javascript是网页开发中常用的一种技术,它将网页中的代码和行为分离开来,使得代码更易于维护和管理。一般来说,分离式javascript代码会以单独的.js文件的形式存放在服务器上,例如: <script src="js…

    JavaScript 2023年6月10日
    00
  • 没有document.getElementByName方法

    在JavaScript中没有document.getElementByName这个方法,但是你可以用其他方法来达到相同的效果。 实现方式一:使用document.querySelectorAll()方法 querySelectorAll()方法可以用来获取文档中所有符合指定CSS选择器的元素,返回的结果是一个类似数组的NodeList对象。你可以根据元素名字…

    JavaScript 2023年6月10日
    00
  • JavaScript如何监测数组的变化

    JavaScript提供了一些方法来监测数组的变化,包括改变数组的方法、监测数组的方法以及对数组进行监听的方法,下面将分别进行详细讲解: 改变数组的方法 JavaScript提供了一些方法用于改变数组,这些方法有可能会改变数组的原始结构,从而影响到程序的正确性。因此,JavaScript也提供了一些-API-来监测数组的变化,以便我们能够及时发现程序中的问题…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部