JS性能优化-防抖
本文最后更新于562 天前,其中的信息可能已经过时,如有错误请发送邮件到1986413837@qq.com

一.防抖的定义

防抖本质上是优化高频率执行代码的一种手段,如:浏览器的 resize scroll keypress mousemove 等事件在触发时,会不断地调用绑定在事件上的回调函数,极大地浪费资源,降低前端性能

为了优化体验,需要对这类事件进行调用次数的限制,对此我们就可以采用throttle(防抖)的方式来减少调用频率

防抖:n秒后在执行该事件,若在n秒内被重复触发,则重新计时。用户高频事件完了,再进行事件操作

二.防抖的应用场景

  • 搜索框搜索输入。只需用户最后一次输入完,再发送请求
  • 手机号、邮箱验证输入检测onchange /oninput事件
  • 窗口大小计算。只需窗口调整完成后,计算窗口大小。防止重复渲染

三.为什么要防抖?

  • 有的操作是高频触发的,但是其实触发一次就好了,
  • 比如我们短时间内多次缩放页面,那么我们不应该每次缩放都去执行操作,应该只做一次就好。
  • 再比如说监听输入框的输入,不应该每次都去触发监听,应该是用户完成一段输入后在进行触发。

总结等用户高频事件完了,再进行事件操作。

四.防抖设计思路:

事件触发后开启一个定时器,如果事件在这个定时器限定的时间内再次触发,则清除定时器,在写一个定时器,定时时间到则触发。

代码如下

关键点1是对于this的保留 以方便后面返回的函数this指向正确的内容

关键点2是对定时器的清除 如果存在还未关闭的定时器 就清除 重新开始计时 达到只在最后一次触发的效果

五.应用案例

搜索框输入:当用户在搜索框中输入文本时,通常会有一些实时搜索建议 使用防抖可以确保只有在用户停止输入一段时间后才触发搜索请求,避免因为快速连续输入而导致的大量请求

代码如下

当用户在搜索框中输入文本时,会触发 input 事件 我们绑定了一个防抖后的 showSuggestions 函数到这个事件上,这样当用户停止输入1500毫秒后,showSuggestions 函数才会执行,以此来模拟获取搜索建议的过程

Life's a struggle, I'll conquer it.
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇