zoukankan      html  css  js  c++  java
  • 函数节流(throttling) 与 防抖(debounce)

    节流和防抖,是限制事件高频率触发 ,这类问题的解决方案,如,滚动条的滚动监听、频繁点击按钮、窗口缩放等,这类事件瞬间频繁触发,会导致性能飙升,程序卡顿。

    节流:一个时间周期内的重复事件,仅触发一次。在连续高频触发事件时,动作会被定期执行,响应平滑。如,快速点击按钮提交网络请求,如果1s内重复点击了多次,可能会发起多次请求,节流策略会限制1s 的周期内,只会发起一次网络请求。

    时间戳方式:

    function throttle(fn, gapTime) {
        if (gapTime == null || gapTime == undefined) {
            gapTime = 1500
        }
        let _lastTime = null
    
        return function () {
            let _nowTime = + new Date()
            if (_nowTime - _lastTime > gapTime || !_lastTime) {
                fn.apply(this, arguments)   //将this和参数传给原函数
                _lastTime = _nowTime
            }
        }
    }

    定时器方式:

    function throttle ( fn, delay){
      var timer;
      var isThrottle = false;
      return function (){
        var _this = this
        var args = arguments
        if(!isThrottle){
          isThrottle = true
          fn.apply(_this,args)
          timer = setTimeout(()=>{
            clearTimeout(timer)
            isThrottle = false
          },delay || 1000)
        }
      }
    }

    调用方式:

    // 对象方法
    Page({ ... handle: throttle(
    function () { console.log(this) }, 500) ... })

    // 事件绑定
    btn.onclick = throttle( function(){}, 1000 )

    防抖:事件持续触发时,会增加一个时间延迟,期间再次触发,会重置这个延迟,直到延迟结束,才会执行事件。当事件快速连续不断触发时,只会在动作结束时执行一次。如,调整窗口大小时,会频繁触发 onresize 事件,防抖策略,会限制事件在间歇的空挡期执行,或操作完之后执行。

    function debounce(fn, content){
       clearTimeout(fn.timer);
       fn.timer = setTimeout(function(){
         fn.call(content)
       },1000)
    }
  • 相关阅读:
    树莓派_GPIO
    Python_PyQt_基本使用
    python_静态,组合,继承
    Linux_操作
    Pyqt5+eric6安装教程
    树莓派操作
    python_爬虫_requests
    HTML的基本操作
    python_pandas_numpy_json
    python_模块_sys_time_random_os
  • 原文地址:https://www.cnblogs.com/_error/p/11527094.html
Copyright © 2011-2022 走看看