当前位置: 首页 > news >正文

【如何实现 JavaScript 的防抖和节流?】

如何实现 JavaScript 的防抖和节流?

前言

防抖(Debounce)和节流(Throttle)是 JavaScript 中优化高频事件处理的两种常用技术。它们可以有效减少事件处理函数的调用次数,提升性能并改善用户体验。本文将详细介绍防抖和节流的实现原理及其应用场景。


关键词

JavaScript、防抖、节流、高频事件、性能优化、事件处理、前端开发、前端面试、前端基础、前端进阶、前端工程化、前端开发最佳实践


一、防抖(Debounce)

1.1 防抖的定义

防抖是指在事件被触发后,等待一定时间(如 300ms)再执行事件处理函数。如果在等待时间内事件再次被触发,则重新计时。

1.2 防抖的实现

function debounce(func, wait) {let timeout;return function(...args) {clearTimeout(timeout);timeout = setTimeout(() => {func.apply(this, args);}, wait);};
}

1.3 防抖的应用场景
搜索框输入:在用户停止输入后再发起搜索请求。

窗口调整大小:在用户停止调整窗口大小后再重新计算布局。

二、节流(Throttle)

2.1 节流的定义
节流是指在一定时间间隔内(如 300ms),事件处理函数最多执行一次。无论事件触发频率多高,都会按照固定的时间间隔执行。

2.2 节流的实现

function throttle(func, wait) {let lastTime = 0;return function(...args) {const now = Date.now();if (now - lastTime >= wait) {func.apply(this, args);lastTime = now;}};
}

2.3 节流的应用场景
滚动事件:在页面滚动时,每隔一定时间执行一次事件处理函数。

鼠标移动:在鼠标移动时,每隔一定时间执行一次事件处理函数。

三、防抖和节流的区别

3.1 执行时机
防抖:在事件停止触发后执行。

节流:在事件触发过程中按照固定时间间隔执行。

3.2 适用场景
防抖:适用于事件触发频率高但只需在事件停止后执行一次的场景。

节流:适用于事件触发频率高但需要按照固定频率执行的场景。

结语

防抖和节流是 JavaScript 中优化高频事件处理的两种重要技术。理解它们的实现原理和适用场景,可以帮助开发者编写出更加高效和用户友好的代码。通过合理使用防抖和节流,可以显著提升应用的性能和用户体验。

相关文章:

【如何实现 JavaScript 的防抖和节流?】

如何实现 JavaScript 的防抖和节流? 前言 防抖(Debounce)和节流(Throttle)是 JavaScript 中优化高频事件处理的两种常用技术。它们可以有效减少事件处理函数的调用次数,提升性能并改善用户体验。本文将详…...

C#中File类的Copy()方法或FileInfo类的CopyTo()方法的参数overwrite取false和true的区别

当调用 System.IO.File.Copy 方法时,第三个参数 overwrite 控制着如果目标位置已经存在同名文件的情况下如何处理。 1、当 overwrite 设置为 true 在这种情况下,即使目标路径下已经有相同名称的文件,该方法也会无条件地覆盖现有的文件。这不…...

力扣 买卖股票的最佳时机

贪心算法典型例题。 题目 做过股票交易的都知道,想获取最大利润,就得从最低点买入,最高点卖出。这题刚好可以用暴力,一个数组中找到最大的数跟最小的数,然后注意一下最小的数在最大的数前面即可。从一个数组中选两个数…...

蚁剑(AutSword)的下载安装与报错解决

蚁剑(AutSword)的下载安装与报错解决 1.下载 唯一官方github下载地址 GitHub - AntSwordProject/AntSword-Loader: AntSword 加载器 2.安装 打开并且进入到下面的界面 下载需要的的版本 进行初始化 3.报错 出现下面的报错 4.解决方法 出现上面报错…...

【全栈开发】----Mysql基本配置与使用

本篇是在已下载Mysql的情况下进行的,若还未下载或未创建Mysql服务,请转到这篇: 2024 年 MySQL 8.0.40 安装配置、Workbench汉化教程最简易(保姆级)_mysql8.0.40下载安装教程-CSDN博客 本文对于mysql的操作均使用控制台sql原生代码…...

Spring Boot项目的基本设计步骤和相关要点介绍

以下是一个关于Spring Boot项目的基本设计步骤和相关要点介绍,我们以一个简单的示例应用——员工管理系统为例进行说明: 一、项目概述 员工管理系统旨在实现对公司员工信息的有效管理,包括员工基本信息录入、查询、更新以及删除等功能。通过Spring Boot框架来快速搭建后端…...

【Spring快速入门】不断更新...

一、Java基础 1、注解 1.3、自定义注解 springboot项目中自定义注解的使用总结、java自定义注解实战(常用注解DEMO)_springboot在类或者方法上加自定义注解-CSDN博客 同平台的新林。大佬就总结的很好,最近写得项目利用aop切面编程中的Aut…...

nodejs版本管理,使用 nvm 删除node版本,要删除 Node.js 的某个版本详细操作

要删除 Node.js 的某个版本并保持 Node Version Manager (nvm) 的管理整洁,可以按以下步骤操作: 步骤 1:查看已安装的 Node.js 版本 nvm ls这会列出你通过 nvm 安装的所有 Node.js 版本。输出类似于: -> v18.17.1v16.20…...

HTML之JavaScript DOM(document)编程处理事件

HTML之JavaScript DOM&#xff08;document&#xff09;编程处理事件 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…...

5.【线性代数】—— 转置,置换和向量空间

五 转置&#xff0c;置换和向量空间 1. 置换矩阵2. 转置矩阵3. 对称矩阵4. 向量空间4.1 向量空间4.2 子空间 1. 置换矩阵 定义&#xff1a; 用于行互换的矩阵P。 之前进行ALU分解时&#xff0c;可能存在该行主元为0&#xff0c;要进行行互换&#xff0c;即PALU 性质&#xff1…...

移动通信发展史

概念解释 第一代网络通信 1G 第二代网络通信 2G 第三代网络通信 3G 第四代网络通信 4G 4g网络有很高的速率和很低的延时——高到500M的上传和1G的下载 日常中的4G只是用到了4G技术 运营商 移动-从民企到国企 联通-南方教育口有人 电信 铁通&#xff1a;成立于 2000 年…...

Python MoviePy 视频处理全攻略:从入门到实战案例

第1章 环境安装与配置 # 案例1&#xff1a;安装MoviePy及FFmpeg !pip install moviepy # Windows安装FFmpeg&#xff1a;https://ffmpeg.org/download.html # Linux: sudo apt-get install ffmpeg# 验证安装 from moviepy.editor import * print("MoviePy版本:", __…...

uniapp webview嵌入外部h5网页后的消息通知

最近开发了个oa系统&#xff0c;pc端的表单使用form-create开发&#xff0c;form-create 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。移动端使用uniapp开发&#xff0c;但是因为form-create移动端只支持vant&#xff0c;不支持uniapp。官…...

macos安装jmeter测试软件

java环境安装 a. 验证安装环境 java -version # 如果有版本信息&#xff0c;说明已安装 b. 安装jdk # 安装 Homebrew&#xff08;如未安装&#xff09; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # 安装 O…...

【virtiofs】ubuntu24.04+qemu7.0调试virtiofs

文章目录 编译qemu编译buildroot编译linux-6.8.1编译virtiofsd启动脚本qemu调试方法环境: win11 + vmware17 ubuntu24.04 buildroot git clone git://git.busybox.net/buildroot linux-6.8.1 https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.8.1.tar.gz virti…...

DeepSeek 和 ChatGPT 在特定任务中的表现:逻辑推理与创意生成

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux网络编程笔记&#xff1a; https://blog.cs…...

MoE硬件部署

文章目录 MoE硬件部署硬件需求**专家硬件映射&#xff1a;模块化计算单元****路由硬件加速&#xff1a;门控网络专用单元****内存与通信优化****能效控制策略****实例&#xff1a;假设部署Mixtral 8x7B到自研AI芯片** 资源分配硬件资源预分配&#xff08;编译时&#xff09;运行…...

MYSQL中的性能调优方法

MySQL性能调优是数据库管理的重要工作之一&#xff0c;目的是通过调整系统配置、优化查询语句、合理设计数据库架构等方法&#xff0c;提高数据库的响应速度和处理能力。以下是常见的MySQL性能调优方法&#xff0c;结合具体的案例进行说明。 1. 优化查询语句 查询语句是数据库…...

Day48(补)【AI思考】-设计模式三大类型统一区分与记忆指南

文章目录 设计模式三大类型统一区分与记忆指南**一、创建型模式&#xff08;对象如何生&#xff1f;&#xff09;****二、结构型模式&#xff08;对象如何组&#xff1f;&#xff09;****三、行为型模式&#xff08;对象如何动&#xff1f;&#xff09;****1. 行为型类模式&…...

公牛充电桩协议对接单车汽车平台交互协议外发版

充电设备与平台交互协议-外发版 V1.0.0.05 1 充电设备与平台交互协议 &#xff08;外发版&#xff09; 充电设备与平台交互协议-外发版 V1.0.0.05 2 版本 版本日期 修改人 版本说明 1.0.0.00 2022.05.05 研发部 外发初版 1.0.0.01 2022.08.26 研发部 0x32 增加鉴权参数 0x34 增…...

AXI实战避坑指南:手把手处理Narrow传输、非对齐地址与WSTRB的协同工作

AXI实战避坑指南&#xff1a;手把手处理Narrow传输、非对齐地址与WSTRB的协同工作 在芯片设计领域&#xff0c;AXI总线协议因其高性能和灵活性已成为事实上的标准。然而&#xff0c;正是这种灵活性带来了工程实现中的诸多挑战——当Narrow传输、非对齐地址和WSTRB信号这三个特性…...

详解下DNS协议

参考&#xff1a; DNS 协议详解&#xff08;适合收藏学习&#xff09;_dns协议-CSDN博客 简介 我们之前聊了IP地址、路由、NAT&#xff0c;这些都是为了让数据包能找到正确的目的地。但有一个根本问题你没提&#xff1a;我们人类记不住IP地址。 你能记住 183.2.172.42 是百度&a…...

别再手动转图了!用Python批量把JPG/PNG转成EPS/TIFF,论文插图一键搞定

科研效率革命&#xff1a;用Python自动化实现论文插图格式转换 深夜的实验室里&#xff0c;显示器荧光映照着一张疲惫的脸——这可能是许多科研工作者在论文投稿截止前的真实写照。当最后一批实验数据终于整理成图表&#xff0c;却突然发现期刊要求提交EPS或TIFF格式的矢量图&a…...

GModPatchTool深度解析:彻底解决Garry‘s Mod浏览器功能异常的完整技术方案

GModPatchTool深度解析&#xff1a;彻底解决Garrys Mod浏览器功能异常的完整技术方案 【免费下载链接】GModPatchTool &#x1f1ec;&#x1fa79;&#x1f6e0; Patches for Garrys Mod. Updates/Improves CEF and Fixes common launch/performance issues (esp. on Linux/Pro…...

公司IT限制下如何搞定WSL?记一次从零搭建Linux编译环境的实战经历

企业IT限制下的WSL生存指南&#xff1a;从零构建Linux开发环境 作为一名开发者&#xff0c;当你兴奋地准备在Windows上通过WSL搭建Linux编译环境时&#xff0c;公司IT部门的种种限制往往会成为意想不到的障碍。网络代理、组策略、驱动映射——这些企业级安全措施虽然保护了公司…...

【flutter for open harmony】第三方库Flutter 鸿蒙版 密码生成器 实战指南(适配 1.0.0)✨

Flutter实战&#xff1a;开源鸿蒙密码生成器组件 Flutter 三方库 cached_network_image 的鸿蒙化适配与实战指南 欢迎加入开源鸿蒙跨平台社区&#xff1a; https://openharmonycrossplatform.csdn.net 本文详细介绍如何在Flutter鸿蒙应用中实现一个功能完善的密码生成器&#…...

百度文库免费获取工具终极指南:三步告别付费墙,轻松保存任何文档

百度文库免费获取工具终极指南&#xff1a;三步告别付费墙&#xff0c;轻松保存任何文档 【免费下载链接】baidu-wenku fetch the document for free 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wenku 还在为百度文库的付费文档而烦恼吗&#xff1f;每次找到心…...

HarmonyOS 6 Progress组件设置定制内容区使用文档

文章目录 功能概述核心 API1. 接口定义2. 关键类型 完整示例代码结构与功能1. 自定义修饰器类&#xff1a;MyProgressModifier2. 自定义内容构建器&#xff1a;myProgress3. 页面组件&#xff1a;Index 核心特性1. 进度联动2. 样式定制3. 状态感知4. 完全替换原生内容 总结 功能…...

终极MiniDisc音乐管理指南:Platinum-MD让复古音乐焕发新生

终极MiniDisc音乐管理指南&#xff1a;Platinum-MD让复古音乐焕发新生 【免费下载链接】platinum-md Minidisc NetMD Conversion and Upload 项目地址: https://gitcode.com/gh_mirrors/pl/platinum-md 想要在2024年重新体验90年代的MiniDisc音乐魅力吗&#xff1f;Plat…...

避坑指南:STM32H7的SD卡虚拟U盘项目,为什么加了FreeRTOS后USB读写就挂了?

STM32H7虚拟U盘开发实战&#xff1a;FreeRTOS环境下USB与SD卡协同设计精要 在嵌入式存储解决方案中&#xff0c;将SD卡通过USB接口模拟为U盘是常见需求。当项目从裸机迁移到FreeRTOS环境时&#xff0c;原本稳定的USB大容量存储类&#xff08;MSC&#xff09;功能可能突然失效—…...