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

前端防抖Debounce如何实现

文章目录

  • 核心概念
  • 代码
  • 机制

核心概念

防抖的核心是:在事件被频繁触发时,只有最后一次触发后经过指定延迟时间才会执行函数

代码

假设你有一个输入框的 oninput 事件需要防抖处理,用户连续输入时,每次输入都会清除之前的定时器,只有当用户停止输入超过 300ms 后,才会执行 console.log(模拟发送请求),在整个过程中,主线程不会被阻塞,其他代码可以正常执行

const input = document.querySelector("input");
let timer = null;input.addEventListener("input", (e) => {// 清除定时器clearTimeout(timer);// 定时器定时执行的逻辑timer = setTimeout(() => {console.log("发送请求:", e.target.value);}, 300);
});

机制

setTimeout 是同步执行,但是被异步调用.setTimeout 是 JavaScript 中的异步操作,它不会阻塞主线程的执行.调用 setTimeout 时,JavaScript 引擎会将回调函数放入任务队列中,等待当前执行栈清空后才执行.setTimeout 的回调函数不会阻塞主线程的其他代码,也就是说直行到setTimeout后,立马执行了console.log了,但是setTimeout内的逻辑是在等待当前执行栈清空后才被执行的

JavaScript 是单线程语言,所有代码(包括 async 函数)都在主线程上执行,异步操作(如 setTimeout、fetch、Promise)通过 事件循环(Event Loop) 实现,不依赖新开线程

console.log("Start");
setTimeout(() => {console.log("Timeout");
}, 300);
console.log("End");

输出

Start
End
Timeout
http://www.lryc.cn/news/581588.html

相关文章:

  • 小白成长之路-mysql数据基础(三)
  • stm32地址偏移:为什么相邻寄存器的地址偏移量0x04表示4个字节?
  • 【JS逆向基础】数据分析之XPATH
  • android 获取手机配对的蓝牙耳机的电量
  • 【PyTorch】PyTorch中torch.nn模块的池化层
  • 全能视频处理工具介绍说明
  • [shad-PS4] docs | 内核/系统服务 | HLE-高等级模拟
  • Spark流水线数据质量检查组件
  • UNet改进(16):稀疏注意力(Sparse Attention)在UNet中的应用与优化策略
  • Redis集群和 zookeeper 实现分布式锁的优势和劣势
  • 物联网实施与运维【路由器/网关配置】+智能楼道系统
  • python库 dateutil 库的各种案例的使用详解
  • 【Note】《Kafka: The Definitive Guide》第三章: Kafka 生产者深入解析:如何高效写入 Kafka 消息队列
  • Android studio在点击运行按钮时执行过程中输出的compileDebugKotlin 这个任务是由gradle执行的吗
  • 升级AGP(Android Gradle plugin)和gradle的版本可以提高kapt的执行速度吗
  • 【python】对纯二进制向量(仅包含 0 和 1,长度为 8 或 16)的检测和提取
  • 基于腾讯云开发与“人·事·财·物”架构理念的家政预约小程序设计与实现
  • 【Python练习】030. 编写一个函数,实现字符串的反转
  • Python 中 ffmpeg-python 库的详细使用
  • 一条 SQL 语句的内部执行流程详解(MySQL为例)
  • 2025 JuniorCryptCTF re 部分wp
  • 重力翻转者:原创趣味小游戏
  • 前端开发常见问题(从布局到性能优化)
  • 【libm】 10 rem_pio2函数 (rem_pio2.rs)
  • 人工智能之数学基础:线性回归算法的矩阵参数求导
  • 传统微商困境与开源链动2+1模式、AI智能名片及S2B2C商城小程序的转型破局
  • AUTOSAR进阶图解==>AUTOSAR_SWS_V2XFacilities
  • Hadoop MapReduce 入门
  • Hadoop高可用集群搭建
  • k8s-服务发布基础