性能优化之节流与防抖


节流

我们先来说说节流的定义:很简单,就是在一定时间内只执行一次函数,应用场景比如:移动端下拉刷新,浏览器滚动条滚动….

为了方便演示与理解,我这里直接以mousemove事件来模拟场景

代码呈上:

绑定了鼠标移动事件,效果如下

他这里疯狂地触发事件,在相似的场景中,有时候我们不希望这么做,那么就需要用节流来解决

节流有2种方式:时间戳定时器

定时器

定时器基础思路:把定时器当作一个变量,当定时器设置的时间到了后使这个变量为空,如果当变量存在的时候自然就不能去触发事件,这就做成功阻止了事件的多次触发

如上,timer等于null时,执行mousemove事件,然后定时器开启,在3秒内再次触发mousemove事件的时候,会被忽略,当3秒之后,timer设为null时,才能触发mousemove事件,效果如下(gif播放的速度太快啦。。。有点看不出是3秒。。。)

时间戳

主要是比较第一次触发事件的时间戳和第二次触发事件的时间戳,如果满足条件了,则允许触发事件

代码如下:

防抖

同样我们先来看看防抖的定义,在多次操作中只有最后一次操作会触发,场景一般都是按钮,你疯狂点击按钮,那么他会疯狂请求接口,这就凉了呀,所以我们要忽略前面的所有请求只保留最后一次。

思路:在一定时间内重复触发事件,则会清除定时器

直接上代码:

效果如下(gif播放速度过快),只要在2s内再次触发mousemove事件,我们就去忽略他,直到最后一次事件保留

总结

节流: 让事件处理函数隔一个指定时间再去触发

防抖: 忽略中间操作,只保留用户的最后一次操作

我的微信公众号: 梨的前端小屋


文章作者: 梨啊梨
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 梨啊梨 !
  目录