zoukankan      html  css  js  c++  java
  • 防抖和节流的应用场景之乱七八糟的汇总

      在前端开发中一部分的用户行为会频繁的触发事件执行,对DOM的操作、资源加载等耗费性能的处理,很可能导致界面卡顿,甚至浏览器崩溃。函数(防抖和节流)就是为了解决类似的需要应运而生的。

      防抖:实时搜索(keyup) 、 拖拽(mousemove)、

      节流:窗口调整(resize)、页面滚动(scroll)、抢购和疯狂点击(mousedown)、

    --------------------------------------------------------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------------------------------------

     

    • 防抖,顾名思义,防止抖动,以免把一次事件误认为多次,敲键盘就是一个每天都会接触到的防抖操作。
      • 登录、发短信等按钮避免用户点击太快,以致于发送了多次请求,需要防抖
      • 调整浏览器窗口大小时,resize 次数过于频繁,造成计算过多,此时需要一次到位,就用到了防抖
      • 文本编辑器实时保存,当无任何更改操作一秒后进行保存

      防抖重在清零 clearTimeout(timer)

    • 节流,顾名思义,控制水的流量。控制事件发生的频率,如控制为1s发生一次,甚至1分钟发生一次。与服务端(server)及网关(gateway)控制的限流 (Rate Limit) 类似。

      • scroll 事件,每隔一秒计算一次位置信息等
      • 浏览器播放事件,每个一秒计算一次进度信息等
      • input 框实时搜索并发送请求展示下拉列表,没隔一秒发送一次请求 (也可做防抖)

      代码如下,可以看出来「节流重在开关锁 timer=null」

     总结 (简要答案)

      防抖:防止抖动,单位时间内事件触发会被重置,避免事件被误伤触发多次。代码实现重在清零 clearTimeout

      节流:控制流量,单位时间内事件只能触发一次,如果服务器端的限流即 Rate Limit。代码实现重在开锁关锁 timer=timeout; timer=null

    --------------------------------------------------------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------------------------------------

     

      防抖:一般可以使用在用户输入停止一段时间过后再去获取数据,而不是每次输入都去获取,如:频繁操作点赞和取消点赞,因此需要获取最后一次操作结果并发送给服务器;search搜索联想,用户在不断输入值时…

      节流:可以将一些事件降低触发频率。比如懒加载时要监听计算滚动条的位置,但不必每次滑动都触发,可以降低计算的频率,而不必去浪费资源;另外还有做商品预览图的放大镜效果时,不必每次鼠标移动都计算位置。

      防抖和节流的目的都是为了减少不必要的计算,不浪费资源,只在适合的时候再进行触发计算。

  • 相关阅读:
    [转][c#]C# 二维数组到底该如何定义?
    [c++]筛法求素数
    USB驱动问题
    使用Ajax.dll前台调用后台方法及错误示例
    asp.net中前台javascript与后台C#交互
    visual stdio2010 生成的缓存文件
    jQuery.ajax概述[转]
    一种正向最小匹配的中文分词算法
    2010 .NET面试题整理之基础篇[转]
    Winform设计不规则窗体
  • 原文地址:https://www.cnblogs.com/mandymm/p/13984918.html
Copyright © 2011-2022 走看看