防抖和节流的实现

《防抖和节流》

  • 防抖
    • 1. 概念介绍
    • 2. 函数实现
    • 3. 应用场景
  • 节流
    • 1. 概念介绍
    • 2. 函数实现
    • 3. 应用场景

防抖

1. 概念介绍

在没有使用防抖函数之前:当我们需要搜索某些物体信息时会导致浏览器压力很大,性能很低。"防抖函数"的作用就是等到用户停止输入的时候,才去执行函数,避免了多次执行造成的资源浪费。
在这里插入图片描述
防抖函数的定义:
当一个事件被触发准备执行事件处理函数时,会等待一定的时间(由自己设定时长),如果在这段时间内没有被再次触发,那就照常执行函数,如果被再次触发,那么上次触发作废,重新从新触发的时间开始计算,直到最终可以执行。

2. 函数实现


简单实现 :

function debounce(fn, delay) {//记录上一次的延时器let timer = nullreturn function () {//清除上一次的延时器clearTimeout(timer)//重新设置新的延时器timer = setTimeout(() => {fn.apply(this, arguments)}, delay)}
}

高阶优化: 第三个参数表示是否需要立即执行,默认不需要

function debounce(func, delay, immediate = false) {let timerlet isRun = falsereturn function () {// 判断定时器是否为空,如果为空,则会直接执行回调函数if (timer) clearTimeout(timer)// 判断是否立即执行if (immediate && !isRun) {func.apply(this, arguments)isRun = true// 如果没有第三个参数则执行简单版本} else {timer = setTimeout(() => {func.apply(this, arguments)isRun = false}, delay)}}
}

3. 应用场景

  • 输入框频繁输入、搜索
  • 按钮频繁点击、提交信息,触发事件,验证检测
  • 窗口大小 resize 变化后,再重新渲染。

节流

1. 概念介绍

事件触发后,规定时间内,事件处理函数不能再次被调用。也就是说在规定的时间内,函数只能被调用一次,且是最先被触发调用的那次。如果这个事件会被频繁触发,那么节流函数会按照一定的频率来执行函数,不管在这个中间有多少次触发这个事件,执行函数的频繁总是固定的。

2. 函数实现


第一种方法:时间戳

function throttle(fn, delay) {//记录上一次函数触发的时间var lastTime = 0return function(){//记录当前函数触发的时间var nowTime = Date.now()if(nowTime - lastTime > delay){fn.apply(this, arguments)//同步执行结束时间lastTime = nowTime}}
}

第二种方法:定时器

function throttle(fn, delay) {let timer = nullreturn function () {if (!timer) {timer = setTimeout(() => {fn.apply(this, arguments)timer = null}, delay);}}
}

3. 应用场景

  • 滚动加载更多
  • 搜索框搜的搜索联想功能
  • 高频点击
  • 表单重复提交

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/503576.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv9有效提点|加入BAM、CloFormer、Reversible Column Networks、Lskblock等几十种注意力机制(二)

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,主力高效涨点!!! 一、本文介绍 本文只有代码及注意力模块简介,YOLOv9中的添加教程:可以看这篇文章。 YOLOv9有效提点|加入SE、CBAM、ECA、SimA…

前端学习第二天-html提升

达标要求 了解列表的分类 熟练掌握列表的用法 熟练掌握表格的结构构成 合并单元格 表单的组成 熟练掌握表单控件分类的使用 1.列表 1.1 无序列表 <ul>&#xff1a;定义无序列表&#xff0c;并且只能包含<li>子元素。 <li>&#xff1a;定义列表项&a…

DDS数据分发服务——提升汽车领域数据传输效率

1.引言 随着智能化技术的快速发展&#xff0c;汽车行业正经历着一场革命性的变革。如今的分布式系统变得越来越复杂且庞大&#xff0c;对网络通信基数要求在功能和性能层面越来越高。数据分发服务&#xff08;DDS&#xff09;作为一项先进的数据传输解决方案&#xff0c;在汽车…

Spring-web-Mvc

文章目录 目录 文章目录 前言 1 . 什么是Spring MVC? 1.1 MVC定义 1.2 主要作用 2. Spring MVC 接受响应数据 2.1 RequestMapping注解配置访问路径 2.2 请求 2.2.1 传递单个参数 2.2.2 传递多个参数 2.2.3 传递对象 2.2.4 后端参数重命名&#xff08;后端参数映射…

桥接生物信息学和化学信息学公开的方法数据库

&#x1f31e;欢迎来到AI生物医学的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年3月1日…

使用 Docker 部署 Fiora 在线聊天室平台

一、Fiora 介绍 Fiora 简介 Fiora 是一款开源免费的在线聊天系统。 GitHub&#xff1a;https://github.com/yinxin630/fiora Fiora 功能 注册账号并登录&#xff0c;可以长久保存你的数据加入现有群组或者创建自己的群组&#xff0c;来和大家交流和任意人私聊&#xff0c;并添…

大龙谈智能内容开通视频号啦

大家好&#xff0c;大龙谈只能内容开通视频号了&#xff0c;欢迎大家扫码关注&#xff1a;

day03-Vue-Element

一、Ajax 1 Ajax 介绍 1.1 Ajax 概述 概念&#xff1a;Asynchronous JavaScript And XML&#xff0c;异步 的 JavaScript 和 XML。 作用&#xff1a; 数据交换&#xff1a;通过 Ajax 可以给服务器发送请求&#xff0c;并获取服务器响应的数据。异步交互&#xff1a;可以在 不…

SpringBoot 整合WebService

文章目录 WebService1.简单介绍WebService1.1. 类型1.2. 架构1.3. 主要特点1.4. 使用场景1.5. Web服务标准和技术 2.案例-WebServiceDemo2.1.引入配置文件2.2.创建接口2.3.创建接口实现类2.4.创建WebService配置类2.5.测试 WebService Web服务&#xff08;Web Services&#xf…

自定义BeanNameGenerator生成规则

通过点进ComponentScan注解进入源码可以看到 追随BeanNameGenerator进入源码可以看到该类是个借口且只有一个方法 点击上面黑色箭头出现两个实现方法 点击第一个方法 进入determineBeanNameFromAnnotation方法中 通过上诉自定义一个生成beanName方法 先创建一个CustomeBeanN…

idea使用maven创建springboot项目

按照图片中的流程来&#xff0c;就可以创建springboot项目&#xff0c;我这个主要是想做一个JavaWeb项目 有用的话&#xff0c;点个小赞赞再走呀~

b站小土堆pytorch学习记录——P7-P8 Tensorboard的使用

文章目录 一、前置知识1.Tensorboard是什么2.SummaryWriter3.add_scalar()4.add_image() 二、代码1.一次函数2.蚂蚁和蜜蜂图片 一、前置知识 1.Tensorboard是什么 TensorBoard 是 TensorFlow 的可视化工具&#xff0c;它允许开发者可视化模型的图&#xff08;graph&#xff0…