当前位置: 首页 > 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.dtcms.com/a/268295.html

相关文章:

  • Kafka “假死“现象深度解析与解决方案
  • JavaScript 中导入模块时,确实不需要显式地写 node_modules 路径。
  • week2
  • 基于 Rust 的前端工具基本实现
  • 【它加上100是一个完全平方数,再加上168又是一个完全平方数】2022-7-17
  • 第十六节:第三部分:多线程:线程安全问题、取钱问题的模拟
  • 浅谈漏洞扫描与工具
  • 计算机网络实验——互联网安全实验
  • 10046 解决 Oracle error
  • NLP文本预处理
  • Chunking-free RAG
  • 拼好题(各个平台的零散题目)
  • vue什么时候可以用index作为:key的索引
  • Vue计算属性(computed)全面解析:原理、用法与最佳实践
  • Python库 python-pyper 的详细使用(优秀的并发数据处理框架)
  • 第一次ctf比赛的赛后复现记录
  • ​保持矩阵秩不变的乘法
  • SoloSpeech:从混合音频中提取目标语音
  • 下载安装 com0com
  • Android16之解决报错:ckati: no such file or directory(二百四十九)
  • ros-noetic搭建turtlebot3测试
  • 数据运营策略 —— B-O价值模型
  • 【机器学习笔记Ⅰ】12 逻辑回归
  • 《Redis》缓存与分布式锁
  • usrp b210 亚克力外壳
  • 【机器学习笔记Ⅰ】11 多项式回归
  • hp开关机
  • CICD[导航]、docker+gitlab+harbor+jenkins从安装到部署
  • vuex 和持久化 vuex-persistedstate
  • macOS虚拟机登录AppleID,全版本,成功率高