前端知识速记:节流与防抖

前端知识速记:节流与防抖

什么是防抖?

防抖是一种控制事件触发频率的方法,通常用于处理用户频繁触发事件的场景。防抖的核心思想是将多个连续触发事件合并为一个事件,以减少执行次数。它在以下场景中特别有效:

  • 输入框输入事件:实时搜索、输入验证等。
  • 窗口调整大小(resize)事件:减少窗口大小变化时的处理频率。

防抖的实现

防抖的实现依赖于计时器。每次触发事件时,都会重置计时器,只有在事件停止触发一定时间后才执行该事件处理函数。

javascript 复制代码
function debounce(fn, delay) {
    let timer = null;
    return function(...args) {
        if (timer) clearTimeout(timer);
        timer = setTimeout(() => {
            fn.apply(this, args);
        }, delay);
    };
}

// 使用示例
const input = document.getElementById('input');
input.addEventListener('input', debounce(() => {
    console.log('用户输入:', input.value);
}, 300));

在这个例子中,输入事件会在用户停止输入后 300 毫秒触发,避免了频繁的输出。

什么是节流?

节流与防抖的目标相似,但其实现方式有所不同。节流是指限制事件的触发频率,保证在一定时间内事件只会执行一次。节流特别适合以下场景:

  • 滚动监听:限制滚动事件的处理,避免性能瓶颈。
  • 定时器定时执行任务:实现定期执行的功能。

节流的实现

节流可以通过时间戳或定时器实现。这里展示使用时间戳进行节流的示例:

javascript 复制代码
function throttle(fn, limit) {
    let lastTime = 0;
    return function(...args) {
        const now = Date.now();
        if (now - lastTime >= limit) {
            lastTime = now;
            fn.apply(this, args);
        }
    };
}

// 使用示例
window.addEventListener('scroll', throttle(() => {
    console.log('用户在滚动');
}, 500));

在这个例子中,用户滚动事件的处理函数每 500 毫秒最多触发一次,以减少计算量和提高性能。

节流与防抖的区别

  • 触发时机:防抖在事件触发后的一段时间内若再次触发则会重新计时,保证事件只执行一次;而节流是保证在一定时间内只执行一次,无论事件触发了多少次。
  • 适用场景:防抖适用于用户输入等需要等待用户停止操作的场景;节流适用于需要在一定时间内持续操作的场景,例如滚动或窗口缩放。
相关推荐
灵感__idea2 小时前
Hello 算法:贪心的世界
前端·javascript·算法
GreenTea3 小时前
一文搞懂Harness Engineering与Meta-Harness
前端·人工智能·后端
killerbasd5 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
吴声子夜歌5 小时前
ES6——二进制数组详解
前端·ecmascript·es6
码事漫谈5 小时前
手把手带你部署本地模型,让你Token自由(小白专属)
前端·后端
ZC跨境爬虫5 小时前
【爬虫实战对比】Requests vs Scrapy 笔趣阁小说爬虫,从单线程到高效并发的全方位升级
前端·爬虫·scrapy·html
爱上好庆祝5 小时前
svg图片
前端·css·学习·html·css3
王夏奇6 小时前
python中的__all__ 具体用法
java·前端·python
大家的林语冰6 小时前
《前端周刊》尤大开源 Vite+ 全家桶,前端工业革命启动;尤大爆料 Void 云服务新产品,Vite 进军全栈开发;ECMA 源码映射规范......
前端·javascript·vue.js
jiayong237 小时前
第 8 课:开始引入组合式函数
前端·javascript·学习