• 函数节流和函数防抖


    防抖函数

    触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间。

    function debounce(method, delay) {
        return function() {
            let context = this,
                args = arguments;
    
            clearTimeout(method.id);
    
            method.id = setTimeout(function() {
                method.call(context, args);
            }, delay);
        }
    }
    

    节流函数

    高频事件触发,但在n秒内只会执行一次,所以节流会稀释函数的执行频率。

    function throttle(menthod, delay, duration) {
        let timer = null;
        let begin = new Date();
        return function() {
            let context = this,
                args = arguments;
            let current = new Date();
    
            clearTimeout(timer);
    
            if(current - begin >= duration) {
                method.apply(context, args);
                begin = current;
            } else {
                timer = setTimeout(function() {
                    method.apply(context, args);
                    begin = current;
                }, duration);
            }
        }
    }
    

    应用

    <template>
        <div>
            <input @change="inputSearch"></input>
        </div>
    </template>
    
    <script>
        export default {
            mounted() {
                this.searchHandle = throttle(() => this.queryList(), 50, 200);
            },
            methods: {
                queryList() {
                    // 请求接口
                },
                inputSearch(data) {
                    this.keyword = data.value;
                    this.searchHandle();
                },
            } 
        }
    </script>
    

    小结

    • 相同点:

      • 都可以通过使用 setTimeout 实现。
      • 目的都是,降低回调执行频率。节省计算资源。
    • 不同点:

      • 函数防抖,在一段连续操作结束后,处理回调,利用clearTimeout 和 setTimeout实现。函数节流,在一段连续操作中,每一段时间只执行一次,频率较高的事件中使用来提高性能。
      • 函数防抖关注一定时间连续触发的事件只在最后执行一次,而函数节流侧重于一段时间内只执行一次。
  • 相关阅读:
    KMP算法
    模板特化
    css 绘制三角形和斜边
    709. 转换成小写字母
    numpy.ceil(), numpy.floor()
    warm_up
    Tensor基础概念
    模型微调
    @函数装饰器
    optimizer.step(), scheduler.step()
  • 原文地址:https://www.cnblogs.com/yhquan/p/12096557.html
Copyright © 2020-2023  润新知