js 函数节流和函数防抖及区别详解

文章目录

  • 1. 前言
  • 2. 函数节流
  • 3. 函数防抖
  • 4. 总结

1. 前言

浏览器中总是有一些操作非常耗费性能。所以就有了函数节流和函数防抖来提高浏览器性能。

函数节流:频繁触发一个事件时候,每隔一段时间,函数只会执行一次。

函数防抖:当触发一个时间后的n秒内,如果该事件没有被第二次触发,则执行。否,则重新开始计时。

2. 函数节流

函数节流应用场景:滚动条滚动事件dom的拖拽事件等

例:
我们都知道滚动条滚动的时候触发事件的频率极其的频繁。监控滚动条的滚动事件,滚动一次该事件可以触发上百次。很显然,有时候,我们并不需要触发如此多的次数。

函数节流,由此而生。在固定的时间内,只触发一次。

以下是封装好的节流函数,自取直接可用👇

//节流函数/*@params (入参)callback:需要节流的函数。   必传!time:节流间隔时间点(也就是多久触发一次)不传的话默认是 300 毫秒*/
//封装好的节流函数const onScroll = (callback,time = 300) => {let state = true; //触发判断条件//判断如否有函数传入if(typeof callback !== 'function'){throw '第一个入参必须是函数,需要被节流的函数'}//制作一个闭包环境return () => {if(state){callback();state = false;setTimeout(() => {state = true;},time)}}}

调用方式模板👇

在这里插入图片描述

3. 函数防抖

函数防抖应用场景:搜索框的搜索事件

例:
搜索框实际上是监控搜索框内容改变,对后台的搜索查询。

比如我们输入一个 “search” 单词,搜索框内部的onchange事件会触发六次,每输入一个字母触发一次change事件。

但是,我们真的需要发送六个请求去查询吗?完全不必要。实际上我们只需要在"search"单词输入完毕后最后查询一次即可。

函数防抖,由此而生。在规定时间内,受防抖的函数被触发第二次时候后,上一次触发销毁,下一次重新开始计时,计时完毕后触发执行。

以下是封装好的防抖函数👇,自取直接可用

//防抖函数
/*@params (入参)callback:需要节流的函数。   必传!time:防抖间隔时间点(也就是倒计时触发的缓冲时间)不传的话默认是 300 毫秒
*/
constonchange = (callback, time = 300) => {let asyncFun;//判断需要被防抖的函数是否传入if(typeof callback !== 'function'){throw '第一个入参必须是函数,需要进行防抖的函数'}//创建一个闭包环境return () => {//在上一个函数被触发前,销毁他if (asyncFun !== undefined) clearTimeout(asyncFun);//创建一个新的函数asyncFun = setTimeout(() => {callback();}, time)}
}

调用方式模板👇

在这里插入图片描述

4. 总结

不论是函数防抖还是函数节流,都是性能优化的一种手段,都是为阻止函数无意义的执行,减小dom压力,避免不必要的性能浪费。

以上是封装好的防抖,节流函数。大家可自取

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

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

相关文章

【webrtc】m98 RoundRobinPacketQueue的优先级处理

m98 代码 PacedSender::EnqueuePackets 的调用者可能是多个地方,所以这个要加锁保护。RoundRobinPacketQueue 本身是没有锁的发现m98和新版本不同,参考:【webrtc】m114自己实现的PrioritizedPacketQueuepush和pop都是RtpPacketToSend 但是实际上,内部是封装为QueuedPacket 处…

JQuery快速入门

目录 一、引入依赖 二、JQuery语法 三、JQuery选择器 四、JQuery事件 五、操作元素 1、获取 / 设置元素内容 1)获取元素 2)设置元素内容 2、获取 / 设置元素属性 1)获取元素属性 2)设置元素属性 3、获取 / 返回css属性…

JavaScript之分时函数、分时间段渲染页面、提高用户体验、参数归一化、高阶函数、分段、appendChild、requestIdleCallback

MENU 前言效果图html原始写法优化方式一(参数归一化)优化方式二(当浏览器不支持requestIdleCallback方法的时候)优化方式三(判断环境) 前言 当前需要向页面插入十万个div元素,如果使用普通的渲染方式,会造成延迟。这时候就需要通过分时函数来实现渲染了。…

(C语言)fscanf与fprintf函数详解

目录 1 fprintf详解 1.1 向文件流中输入数据 1.2 向标准输入流写数据 2. fscanf函数详解 2.1 从文件中读取格式化数据 2.2 从标准输入流中读取格式化数据 1 fprintf详解 头文件:stdio.h 该函数和printf的参数特别像,只是多了一个参数stream&#…

互联网技术知识点总览——计算机网络知识框架

简介 本文对计算机网络的知识点整体框架进行梳理和分享如下:

HANA SQL消耗内存和CPU线程的限制参数

HANA再处理大数据表相关的复杂Sql时,如果没有设置Memory和CPU线程上限的话,会将HANA的资源占用殆尽,造成HANA无法响应其他Sql请求,导致表现在应用服务器上就是系统卡顿的情况。解决上述问题的办法就是按照下图设置Memory(图1&…

车轮上的智能:探索机器学习在汽车行业的应用前景

文章目录 引言:一、机器学习在汽车设计中的应用设计优化模拟与测试 二、智能制造与生产三、自动驾驶技术感知与决策数据融合 四、市场与模式的变革五、机器学习对于汽车行业的机遇与挑战挑战机遇 引言: 在当今数字化时代,机器学习作为人工智…

Vue报错 Cannot read properties of undefined (reading ‘websiteDomains‘) 解决办法

浏览器控制台如下报错: Unchecked runtime.lastError: The message port closed before a response was received. Uncaught (in promise) TypeError: Cannot read properties of undefined (reading websiteDomains) at xl-content.js:1:100558 此问题困扰了…

Linux系统中传输文件

linux系统中,主机间文件传输有多种方式,如主机间的scp、物理主机与虚拟主机间的sftp等。本文从应用角度讨论文件的上传下载。 除putty远程连接工具不能图形化下载上传文件外,其他常用工具,如xshell、finalshell、CRT等,都可以通过图形化方式拖放文件而达到传输文件的目的…

YOLOv8水稻病害检测系统(python代码,可以通过图片、视频或者摄像头三种路径进行检测)

1.效果视频:最新最全面的水稻病害检测创作(yolov8模型,稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫等病害。)_哔哩哔哩_bilibili 2.数据集介绍 水稻叶病害数据集(目标检测,yolo…

JAVA学习笔记27(异常)

1.异常 ​ *异常(Exception) ​ *快捷键 ctrl alt t 选中try - catch ​ *如果进行了异常处理,那么即使出现了异常,程序可以继续执行 1.1 基本概念 ​ *在Java语言中,将程序执行中发生的不正常情况称为"异常"(开发过程中的语…

学术垃圾-文本分类

文本分类的训练、推理 基于transformers包,huggingface的社区,streamlit的界面。简单记录当前的内容。 文本分类训练的说明 文本分类训练 训练标签与ID的对应关系和训练进度条的展示,保存最佳模型,用于后续的推理。 精度折线图和…