JavaScript的防抖和节流一起来了解下

yizhihongxing

JavaScript的防抖和节流一起来了解下

概念介绍

防抖和节流都是为了减少某些高频率事件的触发次数。在JavaScript中常用于优化性能或者提升用户体验。

防抖(debounce)指的是一段时间内重复触发同一事件,只执行一次函数的方法。可以使用定时器实现,如下代码所示:

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

该防抖函数接受两个参数,第一个为要执行的函数,第二个为等待时间。在等待时间内,若重复触发,只有最后一次会被执行。

节流(throttle)指的是一段时间内执行多次的函数,在一段时间内,只会执行一次。可以通过判断两次执行时间间隔是否超过规定时间来实现,如下代码所示:

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

该节流函数接受两个参数,第一个为要执行的函数,第二个为等待时间。在等待时间内,多次触发只有第一次会被执行。等待时间结束后,才能执行下一次。

示例说明

防抖用例

比如,我们有一个搜索输入框,用户每输入一个字符就会进行一次搜索,但有可能用户输入速度过快,频繁触发搜索,造成服务器负担过大。可以通过防抖来减少触发次数,从而减轻服务器负担。

const input = document.getElementById("search-input");
input.addEventListener(
  "input",
  debounce(function() {
    // 请求搜索接口
  }, 300)
);

在搜索输入框的input事件上使用防抖,设置300毫秒等待时间,用户输入速度在这个时间内,若进行多次搜索请求,只有最后一次请求会被执行。可以有效减少不必要的请求,减轻服务器负担。

节流用例

比如,我们有一个页面滚动监听事件,通过监听滚动条的滚动高度,实现动态效果,但是由于滚动条滚动过快,频繁触发事件,导致浏览器的运行效率受到影响,甚至会出现页面卡死的情况。可以通过节流来减少事件触发次数,优化性能。

window.addEventListener(
  "scroll",
  throttle(function() {
    // 重绘页面元素
  }, 300)
);

在滚动条监听事件上使用节流函数,设置300毫秒等待时间,每300毫秒重新触发一次事件,可以减轻浏览器运行负担,提高页面运行效率。

总结

防抖和节流都是优化JavaScript的常用技术,通过设置等待时间来控制函数执行频率,提高代码性能或者提升用户体验。具体情况下,使用哪一种技术取决于业务需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript的防抖和节流一起来了解下 - Python技术站

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

相关文章

  • JavaScript实现短信倒计时60s

    当需要在网页中添加短信验证码的时候,我们通常需要一个倒计时的功能,限制60秒内只允许重新获取一次验证码。下面是JavaScript实现短信倒计时60s的攻略。 1. 倒计时基础框架 我们先来搭建倒计时的基本框架,HTML代码如下: <button id="btn">获取验证码</button> 需要注意的是,这里的…

    JavaScript 2023年5月27日
    00
  • 详解ASP.NET Core MVC四种枚举绑定方式

    接下来我会详细讲解ASP.NET Core MVC四种枚举绑定方式的完整攻略。 ASP.NET Core MVC四种枚举绑定方式 在ASP.NET Core MVC中,我们可以使用四种方式来绑定枚举类型的值。以下是介绍这些方式的详细说明。 1. 基于字符串的方式:BindAttribute 在控制器中处理POST请求时,如果我们需要绑定到枚举类型的值,可以使…

    JavaScript 2023年6月11日
    00
  • JavaScript设计模式—单例模式详解【四种基本形式】

    JavaScript设计模式—单例模式详解【四种基本形式】 单例模式是一种常用的设计模式,它是指在整个应用程序中只需要实例化一次的类。在JavaScript中,单例模式具有着特殊的意义。因为JavaScript是一种无状态语言,每次请求网页都会加载一次JavaScript文件,如果我们没使用单例模式来管理,可能会在内存中生成多个对象实例,造成资源的浪费,…

    JavaScript 2023年6月10日
    00
  • JavaScript代码编写中各种各样的坑和填坑方法

    JavaScript是一门广泛使用的语言,但在编写代码时会遇到各种各样的坑。以下是JavaScript代码编写中的一些常见坑和对应的填坑方法: 坑1:变量作用域问题 JavaScript中的变量作用域是函数级别的,而不是基于代码块的。如果在函数外部声明变量,则变量将成为全局变量,可能会导致变量的混淆和意外赋值。填坑方法是在函数内部使用var、let或cons…

    JavaScript 2023年5月28日
    00
  • JS比较两个时间大小的简单示例代码

    JS比较两个时间大小可以通过将时间字符串转换为时间戳,然后将时间戳进行比较来实现。下面是实现的具体步骤: 第一步:将时间字符串转换为时间戳 使用JavaScript内置的Date对象可以将时间字符串转换为时间戳,方法是调用getTime()函数,它将返回当前日期对象表示的时间与UTC时间1970年1月1日午夜之间相差的毫秒数。 示例代码: let dateS…

    JavaScript 2023年5月27日
    00
  • js 中获取制定的cook信息实现方法

    获取指定的 cookie 信息需要以下步骤: 使用document.cookie获取所有的 cookie 信息。 将获取到的 cookie 信息字符串转换为数组形式。 遍历 cookie 数组,检查指定的 cookie 名称是否存在。 如果指定的 cookie 存在,使用正则表达式取出对应的值并返回。 下面是详细的实现过程: 步骤1:使用 document.…

    JavaScript 2023年6月11日
    00
  • 写几行代码,了解响应式原理

    作者:袁首京 原创文章,转载时请保留此声明,并给出原文连接。 作为当下的开发人员,无论是不是前端,可能都会频繁的与 React、Vue、Svelte、Solidjs 等等打交道。也许你已经很清楚它们背后的运作原理,那不必往下看了。如果还不是很清楚,那咱们可以一起写几行代码,来瞅一眼这些响应式框架背后的思路。 响应式框架最根本的功能其实只有一条:当数据发生变化…

    JavaScript 2023年5月3日
    00
  • js打开windows上的可执行文件示例

    下面提供一份详细的js打开windows上的可执行文件的攻略。 1. 安装Node.js Node.js是一种运行在服务器端的JavaScript运行环境,可以让JavaScript运行在服务器端,调用操作系统的API以及其它的系统级功能。因此,在打开windows上的可执行文件前,需要安装Node.js。 在Node官网(https://nodejs.or…

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