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

js的节流和防抖详解

防抖和节流是JavaScript中的常见优化技巧,它们可以帮助我们控制代码在特定的时间间隔内执行的频率,从而优化性能。下面详细讲解它们的原理和使用方法。

防抖(Debounce):

防抖的原理是当一个事件频繁触发时,只有在停止触发一段时间后,才会执行相应的代码。比如用户在输入框中连续输入,我们不必要每次都去响应用户的输入,而是在用户停止输入一段时间后再去响应。

防抖的实现方法很简单,通过设置一个定时器,来延迟执行函数。如果在定时器执行之前,又触发了该事件,就取消定时器,并重新设置一个新的定时器。

使用示例:

function debounce(func, delay) {let timer;return function() {clearTimeout(timer);timer = setTimeout(() => {func.apply(this, arguments);}, delay);}
}const debouncedFunc = debounce(() => {console.log('执行');}, 1000);
debouncedFunc();
debouncedFunc();
debouncedFunc(); //只会输出一次“执行”

节流(Throttle):

节流的原理是当一个事件频繁触发时,只会在特定的时间间隔内执行一次相应的代码。比如在滚动页面的时候,我们不必要每次都去响应滚动事件,而是在特定的时间间隔内去响应。

节流的实现方法也很简单,在每次执行代码之前,先判断当前时间间隔是否达到了预设的时间间隔,如果达到了,就执行相应的代码,并重新设置计时器;如果没达到,就忽略这次触发。

使用示例:

function throttle(func, delay) {let timer;let lastTime = 0;return function() {const currentTime = new Date().getTime();if (currentTime - lastTime >= delay) {lastTime = currentTime;func.apply(this, arguments);} else {clearTimeout(timer);timer = setTimeout(() => {lastTime = currentTime;func.apply(this, arguments);}, delay - (currentTime - lastTime));}}
}const throttledFunc = throttle(() => {console.log('执行');}, 1000);
throttledFunc();
throttledFunc();
throttledFunc(); //只会输出两次“执行”

总结:

防抖和节流都是常见的优化技巧,它们能控制代码的执行频率,优化性能,提高用户体验。需要根据具体的场景选择使用哪一种技巧。

http://www.lryc.cn/news/205745.html

相关文章:

  • 基于SpringBoot的水果销售网站
  • vue2进阶学习知识汇总
  • SQL SERVER连接oracle数据库几种方法
  • 存储优化知识复习三详细版解析
  • HotReload for unity支持的代码修改
  • 写一个呼吸灯要几行代码?
  • Banana Pi BPI-W3(Armsom W3)RK3588开当板之调试UART
  • LeetCode88——合并两个有序数组
  • C++ BinarySercahTree recursion version
  • 兑换码生成与解析-个人笔记(java)
  • 2023/10/25MySQL学习
  • 网络协议--Ping程序
  • 如何在 Azure 容器应用程序上部署具有 Elastic Observability 的 Hello World Web 应用程序
  • JAVA排序
  • opencalib中lidar2camera安装记录
  • 整个自动驾驶小车001:概述
  • windows本地搭建mmlspark分布式机器平台流程
  • 深入探究 Next.js 中的 getServerSideProps 和 getStaticProps 用法及区别
  • 餐饮业如何高效经营?赶紧闭眼抄这个方法!
  • 餐饮外卖小程序商城的作用是什么
  • nRF52832 SDK15.3.0 基于ble_app_uart demo FreeRTOS移植
  • 电厂数据可视化三维大屏展示平台加强企业安全防范
  • 2246: 【区赛】【宁波32届小学生】最佳交换
  • Java面试记录
  • 【数据库】聚集函数
  • 【单元测试】--编写单元测试
  • ES(elasticsearch) - 三种姿势进行分页查询
  • AQS是什么?AbstractQueuedSynchronizer之AQS原理及源码深度分析
  • 【数据库】函数处理(文本处理函数、日期和时间处理函数、数值处理函数)
  • GEE案例——一个完整的火灾监测案例dNBR差异化归一化烧毁指数