返回

浅聊函数防抖与节流,让你的前端应用更流畅

前端

好的,以下是有关“函数防抖与节流”的文章:








**一、函数防抖** 

函数防抖(debounce)是一种技术,它可以防止函数在短时间内被重复调用。它通过创建一个定时器来实现,当函数被调用时,定时器会重新启动。如果在定时器到期之前函数又被调用,那么定时器会被重置,并且函数不会被执行。这样就可以防止函数在短时间内被重复调用,从而提高应用的性能。

**1、防抖应用场景** 

防抖通常用于处理用户输入事件,例如文本输入、滚动条滚动等。在这些场景中,如果函数被重复调用,可能会导致性能问题。例如,如果在文本输入框中输入文字时,每次按键都触发一个函数来更新UI,那么这可能会导致UI频繁更新,从而影响用户的输入体验。使用函数防抖可以防止这种情况发生。

**2、非立即执行版本** 

function debounce(func, wait) {
let timeout;
return function () {
const args = arguments;
clearTimeout(timeout);
timeout = setTimeout(() => {
func.apply(this, args);
}, wait);
};
}


**3、立即执行版本** 

function debounce(func, wait, immediate) {
let timeout;
return function () {
const args = arguments;
const context = this;
if (immediate && !timeout) {
func.apply(context, args);
}
clearTimeout(timeout);
timeout = setTimeout(() => {
func.apply(context, args);
}, wait);
};
}


**4、合成版本** 

function debounce(func, wait, immediate) {
let timeout;
return function () {
const args = arguments;
const context = this;
if (immediate && !timeout) {
func.apply(context, args);
}
const later = () => {
timeout = null;
if (!immediate) {
func.apply(context, args);
}
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}


**二、函数节流** 

函数节流(throttle)是一种技术,它可以限制函数在一定时间内最多被调用一次。它通过创建一个定时器来实现,当函数被调用时,定时器会重新启动。如果在定时器到期之前函数又被调用,那么函数将不会被执行。这样就可以限制函数在一定时间内最多被调用一次,从而提高应用的性能。

**1、节流应用场景** 

节流通常用于处理频繁触发的事件,例如滚动条滚动、窗口大小改变等。在这些场景中,如果函数被频繁调用,可能会导致性能问题。例如,如果在滚动条滚动时,每次滚动都触发一个函数来更新UI,那么这可能会导致UI频繁更新,从而影响用户的滚动体验。使用函数节流可以防止这种情况发生。

**2、时间戳版本** 

function throttle(func, wait) {
let previous = 0;
return function () {
const now = Date.now();
const args = arguments;
if (now - previous > wait) {
func.apply(this, args);
previous = now;
}
};
}


**3、定时器版本** 

function throttle(func, wait) {
let timeout;
return function () {
const args = arguments;
const context = this;
if (!timeout) {
func.apply(context, args);
timeout = setTimeout(() => {
timeout = null;
}, wait);
}
};
}


**三、总结** 

函数防抖和函数节流都是非常有用的前端优化技术,它们可以帮助减少不必要的函数调用,从而提高应用的性能。函数防抖适用于防止函数在短时间内被重复调用,而函数节流适用于限制函数在一定时间内最多被调用一次。

**四、结语** 

在本文中,我们介绍了函数防抖和函数节流的概念、原理、应用场景以及实现方法。希望这些内容能够帮助你更好地理解和使用它们,从而提高你开发的前端应用的性能。

**参考** 

https://github.com/