JS的节流、防抖

简介: JS的节流、防抖

S的节流和防抖是常用的性能优化技术,用于限制函数的频繁执行,以减少浏览器的负荷和提高用户体验。下面我将分别介绍一下节流和防抖的概念和应用。


节流(Throttling) 是指在一定时间间隔内只执行一次函数。当事件频繁触发时,通过设定一个时间阈值,只有当距离上一次执行函数的时间超过这个阈值时,才会再次执行。这样可以有效地控制函数的执行频率,避免过多的计算或请求。在实际应用中,常见的场景包括页面滚动、窗口调整大小、鼠标移动等。

以下是一个简单的节流函数的实现示例:

function throttle(func, delay) {
  let timer = null;
  return function() {
    if (!timer) {
      timer = setTimeout(() => {
        func.apply(this, arguments);
        timer = null;
      }, delay);
    }
  }
}
// 使用节流函数
const throttledFunc = throttle(function() {
  console.log('Throttled Function');
}, 1000);
window.addEventListener('scroll', throttledFunc);

上述代码中,throttle 函数接受一个原始函数 func 和一个延迟时间 delay,返回一个新的函数。每次触发事件时,该新函数会检查是否存在计时器 timer,如果不存在,则会设置一个延迟执行 func 的计时器。当计时器触发时,会清除计时器,并立即执行 func。这样就实现了节流的效果。


防抖(Debouncing) 是指在一连串连续触发事件后,只执行最后一次触发的函数。通常情况下,我们希望在连续触发某个事件后的最后一次触发时才执行相应的逻辑,这就可以使用防抖技术。


以下是一个简单的防抖函数的实现示例:

function debounce(func, delay) {
  let timer = null;
  return function() {
    clearTimeout(timer);
    timer = setTimeout(() => {
      func.apply(this, arguments);
    }, delay);
  }
}
// 使用防抖函数
const debouncedFunc = debounce(function() {
  console.log('Debounced Function');
}, 1000);
window.addEventListener('resize', debouncedFunc);

上述代码中,debounce 函数接受一个原始函数 func 和一个延迟时间 delay,返回一个新的函数。每次触发事件时,该新函数会清除前一个计时器并设置一个新的计时器,延迟执行 func。如果在延迟期间又触发了同样的事件,那么会重新计时,直到延迟时间内没有再次触发事件,才会执行 func。


通过使用节流和防抖技术,我们可以有效地控制函数的执行频率,避免不必要的计算或请求,提升页面性能和用户体验。在开发中,根据具体的需求选择适合的优化方式即可。希望以上介绍对您有所帮助!

目录
相关文章
|
6天前
|
JavaScript
JS封装节流函数
JS封装节流函数
23 0
|
6天前
|
JavaScript 前端开发 UED
js的防抖节流
js的防抖节流
11 1
|
6天前
|
JavaScript 前端开发 UED
js的节流
js的节流
14 0
|
6天前
|
测试技术
js_防抖与节流(闭包的使用)
js_防抖与节流(闭包的使用)
18 0
|
6天前
|
JavaScript
|
6天前
|
JavaScript 前端开发
【JavaScript】面试手撕节流
上篇我们讲了防抖,这篇我们就谈谈防抖的好兄弟 -- 节流。这里在老生常谈般的提一下他们两者之间的区别,顺带给读者巩固下。
54 3
|
6天前
|
前端开发 JavaScript UED
【JavaScript】面试手撕防抖
防抖: 首先它是常见的性能优化技术,主要用于处理频繁触发的浏览器事件,如窗口大小变化、滚动事件、输入框内容改变等。在用户连续快速地触发同一事件时,防抖机制会确保相关回调函数在一个时间间隔内只会被执行一次。
41 0
|
6天前
|
JavaScript 前端开发
js的节流和防抖
js的节流和防抖
19 0
|
6天前
|
JavaScript 前端开发 UED
|
2天前
|
存储 JavaScript 前端开发
从零开始学习Vue.js
Vue.js 是一种流行的前端框架,它使用简单,灵活且易于上手。如果你是一个前端开发者,并想要学习 Vue.js,本文将为您提供一个从零开始的指南。我们将探讨 Vue.js 的基础知识和常用功能,以及如何构建一个简单的 Vue.js 应用程序。