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

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中常用编程知识

    下面我将为大家详细讲解JavaScript中常用编程知识的完整攻略。 一、变量 在JavaScript中,我们可以使用var、let和const关键字来声明变量。 1. var 使用var声明的变量具有全局或函数作用域。例如: var x = 10; function foo() { var y = 20; console.log(x); // 输出10 c…

    JavaScript 2023年5月27日
    00
  • 微信小程序实现传递多个参数与事件处理

    下面是详细讲解”微信小程序实现传递多个参数与事件处理”的完整攻略: 一、传递多个参数 在微信小程序中,可以通过触发事件,将数据传递给事件处理函数。一般情况下,我们传递单个参数都比较常见,但是在某些场景下,需要传递多个参数。下面我们就来介绍传递多个参数的几种方法。 1. 通过data-属性传递多个参数 我们可以通过在触发事件时在组件或者页面标签中添加自定义的d…

    JavaScript 2023年6月11日
    00
  • 你可能不知道的CORS跨域资源共享

    下面是关于CORS跨域资源共享的详细讲解,希望能对你有所帮助。 CORS是什么 CORS(Cross-Origin Resource Sharing)跨域资源共享,是用来解决跨域访问的一种技术。由于浏览器实行同源策略(Same-Origin Policy),如果一个URL的协议、域名和端口都与当前页面的协议、域名和端口相同,则就是同源;否则就是跨域,跨域请求…

    JavaScript 2023年6月11日
    00
  • javascript replace()方法的简单分析

    JavaScript replace()方法的简单分析 1. replace()方法介绍 replace()方法是JavaScript中用于字符串替换的方法。它可以搜索字符串中所有与模式匹配的子串,并用另一个字符串来替换它们。replace()方法可以接收两个参数:要搜索的字符串(可以是字符串常量或正则表达式),以及要替换的新字符串。如果搜索字符串是正则表达…

    JavaScript 2023年5月28日
    00
  • JS 精确统计网站访问量的实例代码

    基于你的要求,以下是详细讲解 “JS 精确统计网站访问量的实例代码” 的完整攻略。 1. 思路分析 首先,了解如何统计网站的访问量是必要的。一种通用的方式是记录每次请求,但是这将占用大量的存储空间,也会影响系统的性能。 另一种更好的方式是使用浏览器中的 cookie 来跟踪唯一访问者。 我们可以使用 JavaScript 脚本来创建一个 cookie,每次页…

    JavaScript 2023年6月11日
    00
  • JavaScript 中有关数组对象的方法(详解)

    JavaScript 中有关数组对象的方法(详解) 数组是 JavaScript 中非常常用的数据结构。在 JavaScript 中,数组对象有许多方法可以使用,比如添加元素、删除元素、查找元素等等。本文将详细介绍 JavaScript 中有关数组对象的方法。 数组的创建 在 JavaScript 中创建一个数组对象有多种方法: 使用字面量表达式 const…

    JavaScript 2023年5月27日
    00
  • JS实现图片旋转动画效果封装与使用示例

    下面是对“JS实现图片旋转动画效果封装与使用示例”的详细讲解: 标题 JS实现图片旋转动画效果封装与使用示例 描述 本文介绍如何使用JavaScript封装实现图片旋转的动画效果,并提供两个使用示例,帮助读者更好地理解这个实现过程。 动画效果实现原理 要想实现图片旋转动画效果,需要借助CSS3的transform属性。其中,transform属性可以改变元素…

    JavaScript 2023年6月10日
    00
  • Ajax 对象 包含post和get两种异步传输方式

    为了详细讲解Ajax对象,我们需要明确以下几个概念: 异步传输:传输数据时不会阻塞页面,用户可以继续进行其他操作。 GET方法:通过URL传输参数,以键值对的形式发到服务端。 POST方法:将参数放在HTTP请求的body中发送到服务端。 Ajax对象是XMLHttpRequest对象的一个实例,可以通过JavaScript代码创建,在实例化完成后使用其op…

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