JS函数节流和防抖之间的区分和实现详解

yizhihongxing

JS函数节流和防抖是前端开发中常用的优化技巧,以有效降低网页在滚动或者拖拽等交互操作时因为事件处理函数过多而造成的页面卡顿和性能问题。两者的实现方式也有所区别,本文将结合示例详细讲解它们之间的区分和实现方法。

什么是JS函数节流?

JS函数节流指的是在一段时间内,无论触发多少次函数,只执行一次。也就是说,在执行函数的时间间隔内,不管触发了多少次函数,只有一次函数回调被执行,避免在高频事件中过多的调用函数以提高性能。

函数节流的实现方法一般是采用setTimeout或者requestAnimationFrame,在一定时间间隔之后再执行回调函数,如下面的代码所示:

function throttle(fn, delay) {
  let timer = null;
  return function() {
    const context = this;
    const args = arguments;
    if(!timer) {
      timer = setTimeout(function() {
        fn.apply(context, args);
        timer = null;
      }, delay);
    }
  }
}

以上是一个函数节流的实现代码,函数节流的实现比较简单,一般也只需要这样的代码就能够满足我们的使用需求。在这里使用了一个闭包,在外部变量timer作为是否执行的标志,如果在执行的过程中timer有值就不执行回调函数,如果timer为null,就执行回调函数并且给timer赋值,实现了函数节约的功能。

函数节流的应用场景举个例子:给搜索框绑定onkeyup事件,实现出发一次搜索后,1s内不再响应后面的onkeyup事件,防止过多的请求和响应。

什么是JS函数防抖?

JS函数防抖,即在连续触发的事件中,只有足够大的时间间隔,才会执行回调函数。也就是说,当事件被触发时,先不执行函数,在执行连续触发事件的最后一个事件后,等待一定时间后执行回调函数。

函数防抖的实现方法比函数节流稍微复杂一些,但也不算难,需要注意判断间隔时间是否足够,如下面的代码所示:

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

函数防抖和函数节流在实现方法上的区别主要在于:函数防抖将定时器的操作放在了最后一次触发的回调函数中,而函数节流则是在第一次回调函数触发的时候设置了一个延迟时间,在之后每过一段时间才会再次触发回调函数。

函数防抖的应用场景举个例子:给window绑定onresize事件,实现在Browser窗口大小较频繁地调整时,在停止调整大小后进行回调,在减小卡顿的同时又能保证回调的准确性。

本文详细讲解了JS函数节流和防抖之间的区别和实现方法,节流和防抖都是优化页面性能的有效手段,对于前端工程师来说是非常实用的知识。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS函数节流和防抖之间的区分和实现详解 - Python技术站

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

相关文章

  • JavaScript MutationObserver实例讲解

    下面是关于“JavaScript MutationObserver实例讲解”的详细攻略。 什么是MutationObserver MutationObserver是在现代浏览器中新增的监视DOM元素变化的API。它提供了一种能够在DOM对象发生变化时,异步被通知的能力。 如何使用MutationObserver MutationObserver是一个构造函数…

    JavaScript 2023年6月10日
    00
  • JS判断数组四种实现方法详解

    JS判断数组四种实现方法详解 在JavaScript中,判断一个变量是否是数组是一项非常常见的操作。本文将介绍四种常用的方法来判断一个变量是否是数组。 方法一:Array.isArray() Array.isArray()是ES5中新增的方法,可以直接判断一个变量是否是数组。 Array.isArray([]); // true Array.isArray(…

    JavaScript 2023年5月27日
    00
  • php中preg_replace正则替换用法分析【一次替换多个值】

    《PHP中preg_replace正则替换用法分析【一次替换多个值】》是一篇介绍PHP中正则替换的文章,主要介绍preg_replace函数中的一些使用技巧,可以一次替换多个值。 一、preg_replace函数 preg_replace是PHP中用于正则替换的函数。它的语法如下: preg_replace($pattern, $replacement, $…

    JavaScript 2023年6月10日
    00
  • js排序动画模拟-插入排序

    下面是“js排序动画模拟-插入排序”的完整攻略。 算法简介 插入排序是一种简单直观的排序算法,它的基本思想是将一个待排序的序列分成已经排好序的和未排序的两部分,每次取未排序序列中的第一个元素,插入到已排序序列中的适当位置,以此类推,直到全部元素排序完成。 算法步骤 插入排序的步骤如下: 将待排序序列第一个元素看作已经排好序的序列。 遍历待排序序列中的剩余元素…

    JavaScript 2023年6月11日
    00
  • 详细介绍8款超实用JavaScript框架

    详细介绍8款超实用JavaScript框架 JavaScript 拥有十分丰富的生态系统,框架也是其中不可忽视的一部分。下面是8款超实用的 JavaScript 框架,它们受欢迎的原因在于它们能帮助程序员节省时间和提高效率。 1. jQuery jQuery 是最受欢迎的 JavaScript 框架之一。jQuery 旨在简化 HTML 文档遍历、事件处理、…

    JavaScript 2023年5月18日
    00
  • 禁用JavaScript控制台调试的方法

    禁用JavaScript控制台调试,即尝试防止网站被不良分子攻击,避免他们利用JavaScript控制台进行远程执行恶意代码或者非授权编辑页面。以下是禁用JavaScript控制台调试的完整攻略: 1. 禁用F12快捷键 在浏览器中按下F12键可以打开JavaScript控制台,因此禁用F12快捷键是禁用JavaScript控制台调试的一种简单方法。代码如下…

    JavaScript 2023年6月11日
    00
  • JavaScript-定时器0~9抽奖系统详解(代码)

    JavaScript定时器0~9抽奖系统是一种利用定时器生成随机数来模拟抽奖的方法。本文将详细讲解该方法的代码实现和使用过程。 代码实现说明 HTML结构 首先,我们需要在HTML中写入一个包含数字0~9的列表。每个数字都应该有一个特定的ID,以便在JavaScript中调用。 CSS样式 在CSS中,我们可以为数字设置样式,以便它们在抽奖过程中呈现不同的状…

    JavaScript 2023年6月11日
    00
  • ASP.NET中XML转JSON的方法实例

    下面我将为您详细讲解 ASP.NET 中 XML 转 JSON 的方法实例。 一、XML转JSON的方法介绍 XML 和 JSON 是 Web 应用程序中常用的两种数据格式,但是它们之间的转换并不是十分方便。在 ASP.NET 中,可以使用 JsonConvert 类库实现 XML 转 JSON 的功能。 JsonConvert 是一个类库,它提供了一系列静…

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