居然还不知道防抖和节流?前端性能优化的必备神器!

【JavaScript】使用 Lodash 优化性能:防抖与节流详解 在 JavaScript 中,lodash 库提供了防抖(debounce)和节流(throttle)函数,它们都是用于优化高频触发事件的回调函数执行频率的函数。 阅读详情

防抖与节流

防抖(Debounce)和节流(Throttle)是前端开发中常用的性能优化技术,主要用于控制高频触发的事件处理函数的执行次数。

防抖的实现

防抖的核心思想是:在事件触发后,等待一段时间,如果这段时间内没有再次触发事件,则执行处理函数;如果再次触发,则重新计时。

手写防抖代码

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

Lodash 库的使用

Lodash 提供了功能强大的 _.debounce 方法,其实现与手写版本类似,但支持更多功能,如立即执行选项。

import _ from 'lodash';

const debouncedFunc = _.debounce(() => {
    console.log('Debounced!');
}, 300);

节流的实现

节流的核心思想是:在一定时间间隔内,只允许处理函数执行一次。

手写节流代码

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

Lodash 库的使用

Lodash 提供了 _.throttle 方法,同样支持更多选项,如尾部调用。

import _ from 'lodash';

const throttledFunc = _.throttle(() => {
    console.log('Throttled!');
}, 300);

防抖与节流的对比

特性防抖节流
执行频率事件停止触发后执行一次固定时间间隔内执行一次
适用场景输入框搜索、窗口调整滚动事件、按钮频繁点击

经典应用场景

防抖应用场景

  1. 搜索框输入联想:用户停止输入后再发送请求。
  2. 窗口大小调整:调整结束后重新计算布局。
  3. 表单验证:用户停止输入后验证表单字段。
  4. React 中的输入框优化:在表单组件中使用防抖来减少 onChange 事件触发的频率,从而优化性能。
  5. Vue 中的搜索功能:在 v-model 绑定的输入框中使用防抖函数,避免频繁触发搜索请求。
  6. API 请求优化:防止用户快速点击按钮导致多次 API 调用。

节流应用场景

  1. 滚动加载:滚动页面时每隔一段时间加载新内容。
  2. 按钮防重复点击:限制按钮点击频率。
  3. 鼠标移动事件:限制鼠标移动事件的触发频率。
  4. React 中的滚动监听:在组件中监听滚动事件时使用节流,减少渲染次数。
  5. Vue 中的拖拽功能:在拖拽组件中使用节流函数,优化拖拽性能。
  6. 游戏开发中的帧率控制:限制游戏中某些操作的触发频率以保持流畅性。
  7. 窗口滚动事件:在页面滚动时触发的动画效果中使用节流,避免性能瓶颈。
  8. 实时数据更新:在数据可视化场景中,限制图表更新的频率以提升性能。

替代方案

  1. RxJS:使用 RxJS 的 debounceTime 和 throttleTime 操作符处理流式事件。
  2. requestAnimationFrame:对于动画相关的场景,可以使用 requestAnimationFrame 替代节流。
  3. 自定义 Hook:在 React 中,可以封装防抖和节流的自定义 Hook。

RxJS 示例

import { fromEvent } from 'rxjs';
import { debounceTime, throttleTime } from 'rxjs/operators';

const input = document.getElementById('input');

fromEvent(input, 'input')
    .pipe(debounceTime(300))
    .subscribe(() => console.log('Debounced!'));

fromEvent(input, 'input')
    .pipe(throttleTime(300))
    .subscribe(() => console.log('Throttled!'));

requestAnimationFrame 示例

function throttleWithRAF(func) {
    let ticking = false;
    return function (...args) {
        if (!ticking) {
            requestAnimationFrame(() => {
                func.apply(this, args);
                ticking = false;
            });
            ticking = true;
        }
    };
}

防抖和节流是前端性能优化的利器,选择合适的实现方式和工具可以大幅提升用户体验。
→🐒

lodash节流throttle、防抖debounce 节流防抖原理和lodash使用 阅读详情

相关推荐

你的网页为什么卡?7个JS技巧让性能飙升

页面加载转圈圈,点个按钮卡三秒」——每个前端开发者都经历过这种噩梦。别慌!今天我们不聊虚的,直接上7个让JS性能起飞的实战技巧。准备好,你的代码即将脱胎换骨。

weixin_44626085的博客 714

lodash防抖节流

lodash防抖节流使用

qq_60976312的博客 1万+

Unity技能系统核心:从理论到实践构建可扩展的Buff管理器

本文深入探讨了Unity游戏开发中构建可扩展技能系统的核心——Buff管理器。通过剖析三层架构(数据、逻辑、渲染)与独立组件管理模式,提供了从Buff数据定义、管理器核心实现到可视化编辑器搭建的完整实践方案,旨在解决技能系统维护难题,提升开发效率与代码质量。

weixin_29002209的博客 254

Vue - 使用Lodash实现防抖和节流

Vue - 使用Lodash实现防抖和节流

iotjin的专栏 1万+

Curve+ 5.0.2:新一代色彩校准工具如何革新印刷行业标准

Curve+ 5.0.2作为新一代色彩校准工具,通过G7+校准算法和SCTV技术革新了印刷行业的色彩管理标准。该工具显著提升色彩精准度,减少打样时间和材料浪费,支持专色处理,实现跨材质色彩一致性,为印刷企业带来效率与质量的全面提升。

weixin_29228781的博客 529

一文讲透3GPP TS 36.104发射链路相关指标

3GPP是制定移动通信标准的国际组织,其36.104规范对LTE基站射频性能提出详细要求。规范主要涵盖七方面:1)基站输出功率分类标准;2)LTE信道带宽计算方法;3)TD-LTE特有的发射机关断功率及时延要求;4)信号质量指标(频率误差和EVM)及其影响因素;5)邻道泄漏比(ACLR)的45dBc标准;6)带内频谱辐射模板(OBUE)的噪声限制;7)9kHz-12.75GHz频段的带外杂散辐射要求。这些技术要求保障了LTE基站的射频性能和网络质量。

weixin_49761275的博客 4526

Lodash.js实现防抖与节流

首先我们从最上面快速往下滑,在鼠标移入事件里面输出一下index。产生原因:这是因为太快了,浏览器还没反应过来。简单理解:节流相当于技能cd,防抖相当于回城。,那么就来看看第二种如何做。这样就只会打印这几个。

qq_43781887的博客 3307

Python 爬虫实战:拼多多商品评论情感分析(含词云生成与差评预警)

在电商行业竞争日益激烈的当下,商家对商品评论的分析需求愈发迫切。通过 Python 爬虫收集拼多多商品评论,并结合情感分析、词云可视化及差评预警技术,商家可精准洞察消费者反馈,优化商品与服务。本文将深度剖析从爬虫搭建到数据挖掘的关键环节,助力读者构建全流程电商评论分析系统。

yansideyucsdn的博客 1450

防抖与节流

本文介绍了Vue3+TS项目中实现防抖(debounce)和节流(throttle)的实战方法。通过VueUse库的useDebounceFn和useThrottleFn函数,无需手动实现即可优化页面性能。防抖适用于搜索框输入等场景,等待用户停止操作后执行;节流适用于滚动加载等需要持续响应的场景,按固定频率执行。文章详细对比了两者的核心区别、适用场景,并提供了完整的代码示例和使用说明,帮助开发者快速掌握这两种前端性能优化技术,解决页面卡顿问题。

天天向上的编程技术分享博客 1099

使用MATLAB中的Simulink工具来构建一个微电网系统的仿真平台

微电网是指由分布式电源(如太阳能、风能等)、储能装置、负载以及控制和保护装置组成的局部电力系统。它可以独立于主电网运行,也可以与主电网并联运行。本示例将以一个简单的微电网为例,展示如何利用Simulink进行微电网接入与孤岛运行策略的设计与仿真。分布式电源:模拟太阳能光伏板或风力发电机等分布式电源。储能装置:用于存储多余能量或补充不足能量。负载:模拟实际用电需求。双向变流器:实现直流与交流之间的转换,并支持并网和孤岛模式切换。控制器:负责管理微电网的运行模式,包括并网控制和孤岛控制。

xiaoheshang_123的博客 348

上位机 寻边器 通讯实战

寻边器通讯接口实现 本文介绍了上位机与盖泽(Gazer)和JEL品牌寻边器的通讯接口实现方案。主要内容包括: 接口定义:创建了IAlignerOperation接口,定义了获取状态、控制运动、真空吸附等核心功能。 具体实现: 盖泽寻边器(GazerAlignerCjh):通过串口通讯,实现了回零、校准、移动位置等操作 JEL寻边器(JelAligner):同样基于串口通讯,包含错误处理、状态查询等功能 工厂模式:通过AlignerFactory工厂类根据设备品牌创建对应的实现对象。 设备加载:展示了如何在系

StevenChen的博客 377

前端防抖节流避坑手册:搞定高频事件优化的 JS 性能提升神器

过了这个时间,再触发才会又执行。对了,还有个坑得提醒你:用防抖的时候,别把延迟设太长,不然用户会觉得 “怎么点了没反应”,100-300 毫秒是比较舒服的区间;节流的间隔也得根据场景调,滚动加载可以松一点,按钮点击就得紧一点,比如 500 毫秒,不然还是可能重复触发。小索奇之前踩过这坑,做用户注册页面的时候,按钮没处理,有个用户连续点了三次,直接创建了三个相同账号,后面删数据删得我头都大了😂。小索奇上次帮朋友改代码,他给按钮加了防抖,结果延迟设了 2 秒,用户点完以为没点到,又点了好几次,反而更乱了。

思索的涟漪,突破自我 402

Windows10环境下激活虚拟环境报错【source : 无法将“source”项识别为 cmdlet、函数、脚本文件或可运行程序的名称】

在使用Django创建Web程序前,需要创建一个虚拟的工作环境,在使用【source ll_env/bin/activate】命令激活虚拟环境时报错:source : 无法将“source”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。所在位置 行:1 字符: 2。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 1万+

✨ 前端小食堂 | Day2 - JS防抖节流千层酥 ✨

✨✨。

jjjjjjjeffliu的博客 494

OpenClaw实战系列03:Slack/Telegram国际版接入实战指南

在当今的软件开发和工作流自动化中,将项目管理工具与即时通讯平台集成已成为提高团队协作效率的关键。OpenClaw作为一个开源的自动化工具,通过接入Slack和Telegram国际版,可以实现实时通知、自动化任务触发和团队协作的无缝对接。本文将详细介绍如何实现OpenClaw与这两个主流即时通讯平台的集成。OpenClaw是一个开源的自动化工作流引擎,支持多种触发器和执行器,能够帮助开发团队实现CI/CD流程、任务调度、监控告警等自动化场景。模块化设计:支持插件化扩展多触发器支持。

PeterPan的博客 588

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

前端经典面试题(50道)必备神器

大 学 全 栈 面 试 题 库 V120191220 目录 1. 你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? 2. 你简述盒模型 3. CSS3的新特性 4. CSS选择器及其优先级 5. 说说BFC 6. 说说定位相关的属性 7. 谈谈flex布局 8. 你怎么清楚浮动 9. 两边宽度固定中间自适应的三栏布局(默写题,手写笔试题) 10. 浏览器渲染机制 11. 重绘和回流的区别 12. JS数据类型 13. JS...

weixin_59519449的博客 3233

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

前端性能优化方案:让你的网页飞起来的18个绝招(亲测有效)!!!

终极奥义:不做无效优化!!!用Chrome Performance面板找出真实瓶颈,80%的性能问题其实集中在20%的代码上。曾经优化了一个forEach循环改成for,性能直接提升5倍!记住,性能优化是永无止境的战争!但千万别陷入"为了优化而优化"的陷阱。先用数据说话,再针对性下药。希望这些经验能让大家少走弯路(保住更多头发)!有什么独门秘技欢迎评论区battle~

StackOverthink的博客 1007

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

50个前端被忽略的一些JS特性,90%以上的前端不知道!

《50个被低估的JS原生特性:零依赖解决前端开发痛点》 文章总结了前端开发中长期存在的重复性问题(如数组去重、日期格式化等),并整理了50个原生JS/Web API特性,这些特性具有以下优势: 零依赖,开箱即用 性能优化(如Set去重比filter快3倍) 简化代码(如Array.at(-1)取代length-1) 功能强大(如structuredClone处理循环引用) 现代API支持(如IntersectionObserver实现懒加载) 覆盖常见场景包括: 数据处理(Set、Object.entrie

ahualong1的博客 595

GitHub标星56.7K!堪称前端最强面试指南!!

独有前端面试题详解,前端面试刷题必备,900+前端面试真题,JavaScript、CSS、HTML、React、Vue、算法、计算机网络、Node.js、TypeScript、性能优化、前端安全等。8.面试官:说说Loader和Plugin的区别?5.说说你对"三次握手"、“四次挥手”的理解6.为什么推荐将静态资源放到cdn上?9.说说 Node 文件査找的优先级以及 Require 方法的文件查找策略?与 javascript 的区别?9.title与h1的区别、b与strong的区别、i与em的区别?

2501_92234528的博客 1080

前端网络编程详解

你得一步步来: 一个对象,然后用 方法设置请求方法和URL,再挂上 事件回调,最后 出去。整个过程是事件驱动式的,你得盯着 的变化,从0到4,等到4的时候才算完成。但它好处是兼容性无敌,几乎所有的浏览器都支持,而且能监控上传下载的进度,这是它的独门绝技。XHR 可以用 方法,Fetch 则需要配合 接口,生成一个 signal 传到 fetch 的选项里,想取消的时候调用 即可。对于一些不常变的静态资源,或者用户个人数据,可以通过设置 HTTP 头(比如 )来利用浏览器缓存,减少重复请求。

2509_93946509的博客 418

推荐项目:Vue.resize - 拥抱响应式新时代的Vue指令

推荐项目:Vue.resize - 拥抱响应式新时代的Vue指令 在动态网页设计中,元素尺寸的实时调整是提升用户体验的关键一环。今天,我们来探索一个专为Vue.js 2.x打造的神器——Vue.resize,一款轻量级且高效的指令库,它让你能够轻松捕获并应对页面元素的每一次呼吸般的缩放变动。 项目介绍 Vue.resize是一个巧妙结合了CSS Element Queries理念的Vue指令,旨在...

gitblog_00565的博客 979

前端工程师面试,有哪些比较经典的面试题?

本文整理了50道前端经典面试题,涵盖HTML/CSS、JavaScript、Vue框架等核心知识点。内容包括:浏览器内核、盒模型、CSS3新特性、BFC、flex布局等基础概念;JS数据类型、作用域、继承、深拷贝浅拷贝等核心知识;Vue双向绑定原理、生命周期、组件通信、Vuex状态管理等框架相关内容;以及HTTP协议、性能优化、安全防护等进阶话题。这些问题全面覆盖了前端开发中的关键技术点,是准备前端面试的必备题库,可帮助开发者系统梳理知识体系,应对各类技术考察。

前后端面试题面试经验分享 313

前端性能优化:让网页快如闪电的18个绝招(实战经验分享)

最近接手一个日活百万的电商项目,首屏加载竟然要5秒!!!用户调研显示40%的人会因为加载慢直接关闭页面(血淋淋的教训啊)。经过两周的优化大作战,成功把首屏时间压到1.2秒,转化率直接涨了28%!今天就掏心窝子分享这些实战经验,手把手教你打造"秒开"网页。记得上次优化完以为到天花板了,结果用上Serverless边缘计算后,又压了300ms!性能优化就像打地鼠游戏,永远有新的瓶颈出现。但每次优化成功带来的数据提升,那种成就感真的爽到飞起!

kernelguru的博客 1401

前端性能优化:从青铜到王者的实战指南

我们的项目经过这些优化,首屏加载时间直接从4秒降到了1.8秒(产品经理都惊了!性能优化是个持续过程,就像健身一样需要定期"体检"。赶紧打开Chrome DevTools的Performance面板,给你的网页做个全面"体检"吧!优化彩蛋:在地址栏输入开启并行下载,浏览器下载速度直接翻倍!(别告诉别人是我说的)

TechOrbit的博客 850

前端新手必看!JS练手神器js-tool-big-box开源项目推荐

立即体验GitHub地址(建议Star+Watch)学习建议:每天掌握2-3个工具函数,尝试扩展其功能进阶路线:在熟悉工具库后,尝试为项目贡献代码或编写测试用例通过这个项目,你不仅能快速积累JS实战经验,还能学习到工程化的代码组织方式。记住,优秀的开发者不是死记硬背语法,而是懂得利用工具提升效率!🔥🔥🔥道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙。

ztt123654的博客 854

JS手撕:性能优化、渲染技巧与定时器实现

本文介绍了前端开发中高频实用的JS代码片段,重点解析了大数据渲染优化和防抖/节流两大核心技巧。针对大数据渲染卡顿问题,提出分批渲染+文档片段+requestAnimationFrame的解决方案,显著减少DOM操作带来的性能损耗。防抖技术通过闭包保存定时器标识,有效控制频繁触发事件的回调执行,分为立即执行和延迟执行两种模式。节流技术则通过固定时间间隔执行回调,避免过度触发。这些技巧可广泛应用于搜索框联想、窗口resize、滚动加载等场景,大幅提升前端性能和用户体验。

2401_86788218的博客 527
上一篇: 深入解析大文件切片上传:Vue3 实现全流程指南
下一篇: 还在让主线程忙到崩溃?用 Web Worker 解锁前端多线程的正确姿势!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值