手写一个防抖

简介: 手写一个防抖

防抖是一种前端开发中常用的性能优化技术,特别是在处理用户输入或其他频繁触发的事件时。防抖的目的是通过延迟执行来合并连续的触发,以减少频繁操作对系统性能的影响。

手写防抖函数

function debounce(func, delay) {
   
  let timerId;

  return function (...args) {
   
    if (timerId) {
   
      clearTimeout(timerId);
    }

    timerId = setTimeout(() => {
   
      func.apply(this, args);
    }, delay);
  };
}

// 示例用法
const debouncedFunction = debounce(() => {
   
  console.log("防抖触发了!");
}, 300);

// 在事件处理中使用
document.getElementById("myInput").addEventListener("input", debouncedFunction);

防抖的原理

防抖的原理很简单:当事件被触发时,不立即执行处理函数,而是设置一个定时器,在指定的延迟时间后再执行。如果在这个延迟时间内事件再次触发,就清除之前的定时器,重新设置一个新的定时器。这样,只有在事件停止触发一段时间后,处理函数才会被执行。

为什么需要防抖?

  1. 性能优化: 频繁触发的事件,如输入框输入、窗口大小变化等,可能导致大量的计算和DOM操作。通过防抖,可以减少不必要的操作,提高性能。

  2. 减少请求: 在处理输入框输入时,如果每次输入都发送请求,可能会导致不必要的网络请求。通过防抖,可以确保用户停止输入一段时间后再发送请求,减轻服务器负担。

  3. 避免重复操作: 防抖还可以防止重复操作,特别是一些需要用户交互的操作,如点击按钮触发的事件。

如何使用防抖?

  1. 导入防抖函数: 将防抖函数引入你的项目中。

  2. 创建防抖实例: 使用防抖函数创建一个防抖实例,传入需要防抖的处理函数和延迟时间。

  3. 事件绑定: 在需要应用防抖的地方,将防抖实例作为事件处理函数绑定。

const debouncedFunction = debounce(() => {
   
  console.log("防抖触发了!");
}, 300);

document.getElementById("myInput").addEventListener("input", debouncedFunction);

通过上述步骤,你就成功地在项目中应用了防抖技术,优化了性能并提升了用户体验。在实际项目中,可以根据需要调整延迟时间,以平衡性能和响应速度。

目录
相关文章
|
8天前
15 # 手写 throttle 节流方法
15 # 手写 throttle 节流方法
21 0
|
9月前
|
前端开发
手写防抖
手写防抖
47 0
|
8天前
|
前端开发 JavaScript 程序员
【面试题】 js-面试官要求手写节流防抖?
【面试题】 js-面试官要求手写节流防抖?
|
8天前
14 # 手写 debounce 防抖方法
14 # 手写 debounce 防抖方法
27 1
|
8天前
|
前端开发
【前端学习】—函数防抖(十)
【前端学习】—函数防抖(十)
|
8月前
|
前端开发
手写防抖节流
手写防抖节流
手写防抖节流
|
8月前
|
监控 前端开发
前端经典面试题 | 理解 节流 和 防抖(后附手写节流\防抖)
前端经典面试题 | 理解 节流 和 防抖(后附手写节流\防抖)
|
9月前
|
前端开发
手写节流
手写节流
48 1
|
9月前
节流与防抖(附代码)
节流与防抖(附代码)
56 0
|
11月前
|
存储 前端开发 JavaScript
【前端常见面试题】防抖与节流
简介: 在前端开发中,防抖和节流是两个常见的概念,用于处理频繁触发的事件或函数。之前整理防抖与节流的文章,但是细节不全,本文将详细解释防抖和节流的概念,以及应用场景,并提供实际代码示例,帮助更好地理解和掌握这两个常见的前端面试题。
96 1
【前端常见面试题】防抖与节流

热门文章

最新文章