zoukankan      html  css  js  c++  java
  • Javascript Throttle & Debounce

    Throttle

    无视一定时间内所有的调用,适合在发生频度比较高的,处理比较重的时候使用。

    var throttle = function (func, threshold, alt) {
        var last = Date.now();
        threshold = threshold || 100;
    
        return function () {
            var now = Date.now();
    
            if (now - last < threshold) {
                if (alt) {
                    alt.apply(this, arguments);
                }
                return;
            }
    
            last = now;
            func.apply(this, arguments);
        };
    };

    Debounce

    一定间隔内没有调用时,才开始执行被调用方法。

    var debounce = function (func, threshold, execASAP) {
        var timeout = null;
        threshold = threshold || 100;
    
        return function () {
            var self = this;
            var args = arguments;
            var delayed = function () {
                if (!execASAP) {
                    func.apply(self, args);
                }
                timeout = null;
            };
    
            if (timeout) {
                clearTimeout(timeout);
            } else if (execASAP) {
                func.apply(self, args);
            }
    
            timeout = setTimeout(delayed, threshold);
        };
    };


    Test

    var test = function (wrapper, threshold) {
        var log = function () {
            console.log(Date.now() - start);
        };
        var wrapperedFunc = wrapper(log, threshold);
        var start = Date.now();
        var arr = [];
    
        for (var i = 0; i < 10; i++) {
            arr.push(wrapperedFunc);
        }
    
        while(i > 0) {
            var random = Math.random() * 1000;
            console.log('index: ' + i);
            console.log('random: ' + random);
            setTimeout(arr[--i], random);
        }
    };
    
    test(debounce, 1000);
    test(throttle, 1000);
  • 相关阅读:
    运输计划[二分答案 LCA 树上差分]
    树的重心与树的直径
    约瑟夫问题
    [The 2019 Asia Yinchuan First Round Online Programming] D Take Your Seat
    CF858F Wizard's Tour
    当那一天来临
    NOI2000 青蛙过河[递推]
    BZOJ4305 数列的GCD
    中国剩余定理和扩展中国剩余定理
    重写select
  • 原文地址:https://www.cnblogs.com/betarabbit/p/2967190.html
Copyright © 2011-2022 走看看