JavaScript 节流函数 Throttle 详解

JavaScript 节流函数 Throttle 详解

什么是节流函数

函数节流是一种通过控制函数执行频率的技术,可以让我们控制一个函数在一段时间时间内执行多少次。它可以解决一些频繁触发事件的问题,例如页面滚动的触发事件。

为何需要使用节流函数

在一些需要频繁执行的L函数中,比如页面滑动事件,如果不做任何优化处理,就会导致多次重复计算、频繁造成 DOM 渲染,影响页面性能,甚至可能会导致浏览器挂掉。这时,就可以使用函数节流来解决这些问题,避免重复执行。

实现节流函数

我们可以通过 setTimeout 和 Date 来实现节流函数,简单的实现代码如下:

 function throttle(fn, delay) {
     let flag = true;
     return function() {
         if (flag) {
             flag = false;
             setTimeout(() => {
                 fn();
                 flag = true;
             }, delay);
         }
     }
 }

以上代码中,throttle 函数具有两个参数,第一个是需要被执行的函数,第二个是节流的时间(单位为毫秒)。flag 变量初始值为 true,代表第一次调用后需要等待才能再次调用,setTimeout 用来控制节流时间。

节流函数的应用场景

由于函数节流可以让我们减少函数的执行次数,优化了代码的性能,因此在一些需要频繁执行的代码中特别有用,比如:

1. 监听页面滚动事件

在监听页面滚动事件时,很容易就会因为滚动距离的微小变化而频繁触发函数。而这个时候,函数节流就可以很好地解决这个问题。

举个例子:

    window.addEventListener('scroll', throttle(handleScroll, 200));

    function handleScroll() {
      console.log('scroll event');
    }

以上代码中,我们将 handleScroll 函数通过 throttle 函数传入给监听器,控制了监听事件执行的时间间隔为 200ms。

2. 搜索框实时显示搜索结果

当用户在搜索框中输入关键词时,我们希望搜索结果能够实时显示出来,而这个时候函数节流也可以大显身手。

    const inputEle = document.querySelector('#search-input');
    const searchEle = document.querySelector('#search-list');
    const searchThrottle = throttle(searchInput, 200);

    inputEle.addEventListener('input', searchThrottle);

    function searchInput(event) {
      // 获取输入框文本内容,并根据实时的输入值查询相关数据
      const value = event.target.value;
      console.log(`searching for ${value}`);
      // 省略其他查询操作和页面展现
    }

以上代码中,searchInput 函数使用节流实现了在用户输入搜索关键词时,将搜索结果实时地展现在页面上。由于节流时间被设置为了 200ms,搜索结果的实时展现不会让页面变得过于卡顿,同时也减少了请求后端服务的压力。

总结

函数节流是一种常用的优化js代码性能的技巧,在一些频繁触发函数执行的场景中非常实用。本文详细介绍了函数节流的实现、应用场景和使用姿势,希望能帮助大家更好的使用js代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript 节流函数 Throttle 详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JS两种类型的表单提交方法实例分析

    下面是关于“JS两种类型的表单提交方法实例分析”的完整攻略: JS两种类型的表单提交方法实例分析 提交表单的两种方式 在JS中,可以使用两种不同的方式来提交表单:普通表单提交和Ajax表单提交。 普通表单提交 普通表单是指通过浏览器的提交按钮或通过JS代码完成表单的提交。当我们使用表单提交时,表单会重新加载页面并传递表单数据到服务器。普通表单提交方法很简单,…

    JavaScript 2023年6月10日
    00
  • 浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用

    下面我来详细讲解“浅谈JSON和JSONP区别及jQuery的ajax jsonp的使用”的完整攻略。 一、什么是 JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。JSON 数据格式如下所示: { "name": "Michael", "age"…

    JavaScript 2023年5月27日
    00
  • JS代码判断集锦大全第4/5页

    关于“JS代码判断集锦大全第4/5页”的完整攻略,可以分为如下几个部分进行讲解。 集锦内容简介 首先,我们先来了解一下“JS代码判断集锦大全第4/5页”的内容情况。该集锦共包含多个小节内容,每个小节都是介绍一种JS代码判断方法,通过这些方法可以更好地操控和优化JS代码。 具体来说,该集锦中包括了如下这些小节: 类型判断 对象属性判断 数组判断 函数判断 取值…

    JavaScript 2023年5月18日
    00
  • 微信小程序 Page()函数详解

    微信小程序 Page() 函数详解 什么是 Page() 函数 在微信小程序中,一个页面通常对应着一个 .js 文件,这个 .js 文件中定义了一个名为 Page() 的函数。Page() 函数是小程序开发中最基础、最重要的函数之一,它用于定义一个页面,包括页面的生命周期函数、页面事件处理函数以及数据等内容。 Page() 函数语法 Page({ data:…

    JavaScript 2023年6月11日
    00
  • Jquery 一次处理多个ajax请求的代码

    如果需要同时处理多个ajax请求,Jquery提供了一些方便的解决方案。 方案一:使用Jquery的when()方法 当需要同时处理多个ajax请求时,可以使用Jquery的when()方法。该方法接受多个deferred对象,使所有的deferred对象完成时返回一个回调函数。 示例代码: var jqXHR1 = $.ajax(‘/api/url1’);…

    JavaScript 2023年6月11日
    00
  • 如何通过setTimeout理解JS运行机制详解

    接下来我将详细讲解如何通过setTimeout理解JS运行机制详解。 一、setTimeout概述 在深入了解JS运行机制之前我们需要先简单介绍一下setTimeout。 setTimeout指定要在多少毫秒后执行指定的代码,这是一个异步函数。使用setTimeout时你需要传递两个参数:要执行的函数以及延迟的时间,单位是毫秒。例如: setTimeout(…

    JavaScript 2023年6月10日
    00
  • 深入解析Java设计模式编程中观察者模式的运用

    深入解析Java设计模式编程中观察者模式的运用 观察者模式是一种经典的设计模式,它能够实现对象之间的一对多依赖关系。当一个对象状态发生改变时,其所有关联对象都能够收到通知并自动更新。 观察者模式的定义 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象的状态发生变化时,所有的观察者对象都能够收到通知并自动更新。 观察者模…

    JavaScript 2023年5月28日
    00
  • JavaScript通过字符串调用函数的实现方法

    JavaScript可以通过字符串调用函数的方法称为函数调用方法,也就是将字符串转化成函数名称并直接调用对应的函数。下面是一些实现方法的示例说明: 1. 使用eval()函数实现字符串调用函数 使用eval()函数可以将字符串解析成JS代码并执行,从而实现字符串调用函数的方法。 // 定义需要调用的函数 function greeting(message) …

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