手写一个防抖

简介: 手写一个防抖

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

手写防抖函数

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);

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

目录
相关文章
|
缓存 运维 监控
10分钟带你了解 Linux 系统中的 Top 命令
`top`命令是Linux系统中用于实时监控系统资源利用率的工具,展示CPU、内存使用情况及进程状态。启动`top`只需在终端输入`top`。默认按CPU使用率排序,可通过`P`、`M`、`T`键改变排序。使用`k`键可结束进程,`d`键调整刷新率,`q`键退出。输出信息包括系统负载、进程状态、内存使用等。通过进程列表,可以观察到每个进程的CPU和内存占用、用户、运行时间等。了解`top`能帮助测试工程师排查性能问题。
|
移动开发 前端开发 JavaScript
【值得收藏】HTML5使用多种方法实现移动页面自适应手机屏幕的方法总结
随机智能手机,平板等智能移动设备的普及。移动端是我们目前接触最多的页面展示终端,不管是对于开发者还是其他普通的使用者都是普遍的存在,而且移动终端的使用比电脑更广泛,更频繁,特别是当微信平台等变成我们日常使用工具之后。所以对于开发者来说,不管任何开发任何界面都需要着重考虑页面对移动设备的兼容以及自适应。才能让用户体验性更好。
2197 0
|
机器学习/深度学习 算法 Python
Python高级算法——支持向量机(Support Vector Machine,SVM)
Python高级算法——支持向量机(Support Vector Machine,SVM)
949 2
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
安全 区块链 数据安全/隐私保护
蚂蚁区块链的优势是什么
蚂蚁区块链的优势是什么
831 2
|
存储 弹性计算 文件存储
Windows容器使用阿里云NAS SMB文件系统做持久化存储目录
随着Windows容器逐渐普及和发展,Windows容器持久化存储以及容器间共享的需求越来越高涨。 本文介绍如何让Windows主机正确配置NAS SMB文件系统,支持Windows容器让Docker镜像使用挂载NAS SMB文件系统的子目录作为持久化存储目录。
7521 0
Windows容器使用阿里云NAS SMB文件系统做持久化存储目录
|
10月前
|
Web App开发 编解码 vr&ar
使用Web浏览器访问UE应用的最佳实践
在3D/XR应用开发中,尤其是基于UE(虚幻引擎)开发的高精度场景,传统终端因硬件局限难以流畅运行高帧率、复杂效果的三维应用。实时云渲染技术,将渲染任务转移至云端服务器,降低终端硬件要求,确保用户获得流畅体验。具备弹性扩展、优化传输协议、跨平台支持和安全性等优势,适用于多种终端和场景,特别集成像素流送技术,帮助UE开发者实现低代码上云操作,简化部署流程,保留UE引擎的强大开发能力,确保画面精美且终端轻量化。
431 17
使用Web浏览器访问UE应用的最佳实践
|
JSON 数据可视化 API
玩转数据科学:Python实战分析天气预报变动趋势
【10月更文挑战第1天】随着气候变化对日常生活的影响日益显著,理解和预测天气模式变得越来越重要。本文将引导您如何使用Python来抓取和分析天气预报数据,从而揭示天气变化的趋势。我们将介绍从获取公开气象API的数据到清洗、处理以及可视化整个过程的技术方法。
814 2
|
关系型数据库 MySQL Linux
Linux环境安装MySQL8.0.36使用rpm包安装,安装顺序是什么?
【8月更文挑战第23天】Linux环境安装MySQL8.0.36使用rpm包安装,安装顺序是什么?
1018 1