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

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

什么是防抖?

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

  • 输入框输入事件:实时搜索、输入验证等。
  • 窗口调整大小(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 毫秒最多触发一次,以减少计算量和提高性能。

节流与防抖的区别

  • 触发时机:防抖在事件触发后的一段时间内若再次触发则会重新计时,保证事件只执行一次;而节流是保证在一定时间内只执行一次,无论事件触发了多少次。
  • 适用场景:防抖适用于用户输入等需要等待用户停止操作的场景;节流适用于需要在一定时间内持续操作的场景,例如滚动或窗口缩放。
相关推荐
东东51620 分钟前
基于vue的电商购物网站vue +ssm
java·前端·javascript·vue.js·毕业设计·毕设
MediaTea26 分钟前
<span class=“js_title_inner“>Python:实例对象</span>
开发语言·前端·javascript·python·ecmascript
梦梦代码精1 小时前
开源、免费、可商用:BuildingAI一站式体验报告
开发语言·前端·数据结构·人工智能·后端·开源·知识图谱
0思必得01 小时前
[Web自动化] Selenium执行JavaScript语句
前端·javascript·爬虫·python·selenium·自动化
程序员敲代码吗1 小时前
MDN全面接入Deno兼容性数据:现代Web开发的“一张图”方案
前端
0思必得01 小时前
[Web自动化] Selenium截图
前端·爬虫·python·selenium·自动化
疯子****2 小时前
【无标题】
前端·clawdbot
RichardLau_Cx3 小时前
【保姆级实操】MediaPipe SDK/API 前端项目接入指南(Web版,可直接复制代码)
前端·vue·react·webassembly·mediapipe·手部追踪·前端计算机视觉
不爱写程序的东方不败3 小时前
APP接口测试流程实战Posman+Fiddler
前端·测试工具·fiddler
晚霞的不甘4 小时前
Flutter for OpenHarmony构建全功能视差侧滑菜单系统:从动效设计到多页面导航的完整实践
前端·学习·flutter·microsoft·前端框架·交互