js 节流防抖

js 节流防抖

js 节流防抖

在前端开发中,为了优化页面性能和用户体验,经常会用到节流(throttle)和防抖(debounce)的技术。这两种技术通过控制某个函数的执行频率来提高页面的性能表现。

节流(throttle)

节流的概念是在一定时间内,无论触发几次目标函数执行,都只认第一次,忽略后续的触发。在这段时间内无论执行多少次目标函数都不会再有其他操作。

应用场景

  1. 页面滚动事件的监听。
  2. 搜索框输入联想搜索功能。
  3. 鼠标移动事件的监听。

实现原理

在触发目标函数时,记录下当前时间戳。如果下一次触发时间间隔小于规定的时间间隔,就忽略这次触发。

代码示例

function throttle(func, wait) {
    let timer;

    return function() {
        if (!timer) {
            func.apply(this, arguments);
            timer = setTimeout(() => {
                timer = null;
            }, wait);
        }
    }
}

const printHello = () => {
    console.log('Hello World!');
}

const throttledPrintHello = throttle(printHello, 1000);

window.addEventListener('scroll', throttledPrintHello);

运行结果

Hello World!
Hello World!
Hello World!
...

防抖(debounce)

防抖的概念是在一定时间内,如果事件被频繁触发,只认最后一次。在这段时间内如果事件频繁触发,则会重新计时。

应用场景

  1. 搜索框用户输入时,只有在输入停止一段时间后再进行搜索。
  2. 窗口大小改变时,只有在停止改变一段时间后再进行响应。
  3. 防止连续点击按钮触发多次事件。

实现原理

在触发目标函数时,设置一个定时器。如果在规定的时间内再次触发该函数,则清除之前的定时器重新设置一个新的定时器。

代码示例

function debounce(func, wait) {
    let timer;

    return function() {
        clearTimeout(timer);
        timer = setTimeout(() => {
            func.apply(this, arguments);
        }, wait);
    }
}

const printHello = () => {
    console.log('Hello World!');
}

const debouncedPrintHello = debounce(printHello, 1000);

window.addEventListener('scroll', debouncedPrintHello);

运行结果

Hello World!

总结

节流和防抖是前端开发中常用的性能优化技术,通过它们可以有效控制函数的执行频率,以提升页面性能和用户体验。在实际开发中,根据不同的场景选择合适的技术来实现更好的效果。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程