防抖与节流实现_javascript性能优化

防抖节流是优化高频事件的两种手段。防抖通过延迟执行,仅在事件停止触发后运行一次,适用于搜索输入等场景;节流则保证函数在设定时间间隔内最多执行一次,适合滚动监听、鼠标移动等持续触发的场景。两者核心区别在于执行时机与频率控制方式不同,合理使用可显著提升性能。

防抖与节流实现_javascript性能优化

在 JavaScript 开发中,频繁触发的事件(如窗口滚动、窗口缩放、输入框输入、鼠标移动等)容易造成性能问题。防抖(debounce)和节流(throttle)是两种常用的优化手段,用于控制函数执行频率,减少不必要的调用,提升页面响应速度与性能。

防抖(Debounce):只执行最后一次操作

防抖的核心思想是:当事件被触发后,设置一个延迟时间,若在这个时间内事件再次被触发,则重新计时。只有当事件停止触发超过设定的时间后,才会真正执行一次回调函数

适用于搜索建议、窗口大小调整、按钮重复点击等场景。

示例:实现一个简单的防抖函数

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

使用方式:

立即学习“Java免费学习笔记(深入)”;

const debouncedSearch = debounce(() => {
  console.log(‘执行搜索’);
}, 300);

绑定到输入框事件即可避免每次输入都发起请求。

节流(Throttle):固定时间执行一次

节流的策略是:无论事件触发多频繁,确保函数在指定的时间间隔内最多执行一次。比如每 100ms 最多执行一次处理函数。

适合用于鼠标移动、滚动加载、拖拽等高频但不需要实时响应的场景。

示例:实现一个基于时间戳的节流函数

function throttle(func, limit) {
  let inThrottle;
  return function(…args) {
    if (!inThrottle) {
      func.apply(this, args);
      inThrottle = true;
      setTimeout(() => inThrottle = false, limit);
    }
  };
}

使用方式:

立即学习“Java免费学习笔记(深入)”;

window.addEventListener(‘scroll’, throttle(() => {
  console.log(‘滚动中,但不会太频繁’);
}, 100));

防抖与节流的区别总结

执行时机不同:防抖是事件停止后才执行;节流是周期性执行。 适用场景不同:防抖适合最终结果有效的情况(如搜索);节流适合持续反馈的场景(如滚动监听)。 触发频率控制方式不同:防抖可能一次都不执行(一直触发);节流至少会按间隔执行。

合理选择防抖或节流,能显著降低函数调用次数,减轻浏览器负担,提升用户体验。基本上就这些,不复杂但容易忽略细节。

以上就是防抖与节流实现_javascript性能优化的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1540078.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
JavaScript性能监控_javascript用户体验
上一篇 2025年12月21日 12:09:23
JavaScriptFetchAPI使用_JavaScript现代请求方式
下一篇 2025年12月21日 12:09:34

相关推荐

  • Win10提示“telnet不是内部或外部命令”怎么办?

    Win10提示“telnet不是内部或外部命令”怎么办?Win10提示“telnet不是内部或外部命令”怎么办?Win10提示“telnet不是内部或外部命令”怎么办?Win10提示“telnet不是内部或外部命令”怎么办?

    最近有部分使用win10系统的用户反馈,在尝试执行telnet命令时,系统会返回提示信息“telnet不是内部或外部命令”。这种情况让许多用户感到困惑,甚至有些不知所措。实际上,这种问题通常源于系统未安装“telnet客户端”功能所致。那么,当win10出现“telnet不是内部或外部命令”的提示时…

    2026年9月3日 用户投稿
    000
  • VSCode怎么运行Jar包_VSCodeJava项目打包与执行JAR教程

    在VSCode中运行JAR包需先通过Maven或Gradle构建生成可执行JAR,再在终端使用java -jar命令运行;VSCode通过Java Extension Pack提供代码编辑、调试和构建集成支持,简化项目管理与胖JAR生成流程。 在VSCode里运行JAR包,其实更多的是指利用VSCo…

    2026年9月3日
    100
  • ntfs和fat32的区别是什么?

    使用过xp和win7系统的朋友们可能会注意到,xp系统的磁盘格式通常是fat32的,而win7系统则是ntfs的。那么,ntfs和fat32之间到底有什么区别呢?别急,今天就让小编来为大家详细讲解一下。 fat32是一种分区格式。它采用32位的文件分配表,这使得fat32在磁盘管理方面的能力得到了显…

    2026年9月3日
    000
  • 谷歌电脑进化史资源全解析_谷歌电脑发展历史的下载途径与内容介绍

    谷歌的“电脑进化史”本质是其计算技术的深层演进,1.核心里程碑包括pagerank算法、gfs与mapreduce分布式系统、android系统、chrome浏览器、gcp云计算平台及tpu芯片与ai突破;2.追溯途径有google ai blog、research官网、youtube官方频道、权威…

    2026年9月3日
    100
  • scratch网页版入口 scratch网页版登录入口

    Scratch是一款由麻省理工学院(MIT)媒体实验室“终身幼儿园”团队开发的图形化编程工具。它完全免费,旨在让编程学习变得像搭积木一样简单有趣。使用者无需记忆复杂的代码语法,只需通过拖拽不同功能的积木块,并将它们拼接在一起,就可以轻松创造出属于自己的互动故事、游戏和动画作品。 这个平台不仅是少儿编…

    2026年9月3日
    200
  • TikTok评论显示异常怎么办 TikTok评论刷新与修复技巧

    先检查网络与设备连接,确认联网状态并切换网络模式;再清理TikTok缓存并更新至最新版本;若问题仍存在,判断是否因账号限流导致评论异常。 如果你发现TikTok评论显示异常,比如刷新不出来、加载卡顿或根本看不到评论入口,这通常和网络环境、应用状态或账号行为有关。别急着重装,先按下面几步排查。 检查网…

    2026年9月3日
    200
  • Java Collections.reverse和Collections.shuffle的使用

    Collections.reverse用于反转列表顺序,如将[apple, banana, cherry]变为[cherry, banana, apple],适用于倒序展示场景;2. Collections.shuffle用于随机打乱列表元素,常用于抽题或洗牌等需随机排序的场景,支持自定义Rando…

    2026年9月3日
    100
  • win10电脑怎么连接打印机

    win10电脑怎么连接打印机win10电脑怎么连接打印机win10电脑怎么连接打印机win10电脑怎么连接打印机

    如何连接打印机?在日常工作中,打印机是我们不可或缺的工具之一。那么,在win10系统下如何将打印机与电脑连接起来呢?接下来,就让小编来教大家具体的操作步骤吧。 win10电脑连接打印机 首先,在电脑桌面左下角点击windows图标,然后选择“设置”选项。 进入设置界面后,找到并点击“设备”选项。 在…

    2026年9月3日 用户投稿
    300
  • b站怎么修改绑定的手机号_B站账号更换绑定手机号教程

    更换B站绑定手机需验证身份,可通过当前手机、邮箱或客服申诉三种方式操作。首先打开哔哩哔哩App进入“我的”页面,点击设置进入安全隐私中的手机绑定选项;若能接收短信,直接验证原号码后输入新号及验证码完成更换;若无法接收短信,可选择通过已绑定邮箱验证,填写邮箱并点击发送验证邮件,登录邮箱完成验证后输入新…

    2026年9月3日
    000
  • 内网环境下,如何不修改浏览器设置,让网站项目通过HTTP协议调用高拍仪?

    内网环境下网站项目如何通过HTTP协议调用高拍仪? 内网网站项目需要在现代浏览器(非IE)的HTTP环境下读取高拍仪画面,而navigator.mediaDevices.getUserMedia()方法因安全策略限制无法在HTTP下直接使用。 为了避免修改浏览器安全设置,最佳方案是采用中间层服务器方…

    2026年9月3日
    100
  • 从消费者洞察到销量提升:数据标签重塑企业商业增长全链路

    在数字经济蓬勃发展的今天,营销行业正经历着前所未有的变革。越来越多的品牌意识到,传统粗放式营销模式已难以满足消费者多元化需求,数据驱动决策成为企业破局的关键。 在数字营销的过程中,数据标签能够将用户复杂的行为轨迹转化为结构化信息,帮助企业构建多维用户画像、深度挖掘用户潜在需求,实现精准触达用户并赋能…

    2026年9月3日
    100
  • 东风汽车:旗下自主品牌已完成DeepSeek全系列大语言模型接入工作

    东风汽车旗下自主品牌全面拥抱deepseek大语言模型!2月8日,东风汽车宣布已完成deepseek全系列大语言模型在其自主品牌车型的接入工作,并将在近期陆续应用于岚图、猛士、奕派、风神和纳米等品牌车型。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 …

    2026年9月3日
    200
  • 苹果手机打字慢半拍怎么回事_苹果手机打字延迟卡顿问题解决方法

    输入延迟可通过更新系统、清理键盘缓存、切换输入法、重启设备、重装第三方输入法或还原所有设置解决。具体步骤依次为:检查iOS更新;还原键盘词典;添加并测试系统输入法;重启iPhone;卸载并重装第三方输入法;最后还原所有设置以排除配置问题。 如果您在使用苹果手机时发现打字出现延迟或卡顿,输入的内容不能…

    2026年9月3日
    200
  • 华为搜索引擎入口快速访问_华为花瓣搜索官网的智能化体验分享

    花瓣搜索官网无法直接通过独立app访问,用户可通过桌面图标、下拉搜索框、语音唤醒或浏览器输入https://websearch.huawei.com进入;2. 其智能化体验包括ai语义理解、多源内容聚合、个性化推荐和隐私保护;3. 提升效率的技巧有开启搜索建议、管理搜索源、使用深色模式、调节字体、切…

    2026年9月3日
    100
  • Win7系统提示“文件丢失”导致无法自动安装驱动怎么办?

    新购置的电脑通常都需要安装驱动程序,但在安装的过程中,有时会出现一些问题。例如,有使用windows 7系统的用户反馈,在安装驱动时突然弹出“文件丢失”或者“找不到指定模块”的提示,从而导致驱动安装中断,只能选择手动安装。而造成“文件丢失”现象的主要原因通常是.dll文件缺失所引发的。 以下是具体的…

    2026年9月3日
    300
  • 高德地图连接CarPlay后没反应怎么回事_高德地图CarPlay连接异常解决

    首先检查高德地图的CarPlay权限设置,确保其在允许列表中;若问题仍存,依次尝试重启应用与CarPlay连接、更新高德地图至最新版本、还原网络设置并重新配对CarPlay;最后排查车载系统兼容性及USB供电情况,使用原装线缆并确认车辆系统已更新。 如果您在成功连接CarPlay后,高德地图在车机端…

    2026年9月3日
    000
  • 深度系统教你解决win10引导坏道修复方法

    深度系统教你解决win10引导坏道修复方法深度系统教你解决win10引导坏道修复方法深度系统教你解决win10引导坏道修复方法深度系统教你解决win10引导坏道修复方法

    在使用电脑的过程中,用户可能会遇到硬盘出现坏道的情况,尤其是win10系统引导区出现问题时,该如何修复呢?通常情况下,逻辑性坏道是可以通过格式化分区来解决的。今天,小编为大家整理了一些相关的解决方案,有需要的朋友可以参考一下。 Win10引导坏道修复方法 第一步,打开“此电脑”窗口。 第二步,点击顶…

    2026年9月3日 用户投稿
    100
  • HTML2Canvas生成PDF耗时过长怎么办?

    优化HTML2Canvas:解决PDF打印耗时难题 项目中使用HTML2Canvas将HTML内容转换为Canvas,再生成PDF,遇到性能瓶颈:图片数量增加导致耗时显著增长。本文分析原方案问题,并提出优化策略。 原方案流程:HTML渲染 -> HTML2Canvas转换 -> JPEG…

    2026年9月3日
    100
  • Win7设备管理器中出现未知设备msft0101的解决方法

    在win7系统里,默认会自动查找并安装驱动程序,然而部分深度技术爱好者可能会注意到,在设备管理器中存在一个带有感叹号的未知设备未成功安装驱动,进一步查看属性时会发现其硬件id显示为“msft0101”。面对这种情况,今天就为大家介绍一种解决win7设备管理器中出现未知设备msft0101的有效办法。…

    2026年9月3日
    100
  • Win10系统下使用Django2.0.4+Celery4.4.2+Redis来实现异步任务队列以及定时(周期)任务(2020年最新攻略)

    Win10系统下使用Django2.0.4+Celery4.4.2+Redis来实现异步任务队列以及定时(周期)任务(2020年最新攻略)Win10系统下使用Django2.0.4+Celery4.4.2+Redis来实现异步任务队列以及定时(周期)任务(2020年最新攻略)Win10系统下使用Django2.0.4+Celery4.4.2+Redis来实现异步任务队列以及定时(周期)任务(2020年最新攻略)Win10系统下使用Django2.0.4+Celery4.4.2+Redis来实现异步任务队列以及定时(周期)任务(2020年最新攻略)

    首先要明确的是,celery 4.1+版本的官方文档已经详细说明了,在该版本之后,无需再引入依赖于django-celery库,直接使用celery本身即可。在去年年初的一篇文章中提到的python 3.7.2和django 2.0.4使用django-celery时遇到的一些问题,现今已不存在。技…

    2026年9月3日 用户投稿
    100

发表回复

登录后才能评论
关注微信