"的setTimeout" VS" debounce"插件 - 推迟事件上的代码执行

时间:2014-08-02 11:58:16

标签: javascript jquery jquery-plugins debouncing

我想推迟在事件上执行一些代码。 使用标准setTimeout函数和插件去抖(link to debounce)之间究竟有什么区别?

以下是 setTimeout的示例:

var timeout;
$(window).on("scroll", function() {

    clearTimeout(timeout);
    timeout = setTimeout(function() {

        doSomethingFunction();

    }, 500);

});

这是debounce的一个例子

$(window).on("scroll",

    $.debounce(500, doSomethingFunction)

);

当然,对于去抖,代码更短但是还有其他好处吗? 哪一个更快?

1 个答案:

答案 0 :(得分:5)

debounce在内部使用setTimeout,因此差异与setTimeout被解雇的次数有关。

debounce限制它发射的次数setTimeout。如果在短时间内发送多个请求,则只会有一个请求通过。

var timeout_id = setTimeout(
    debounce_mode ? clear
    : exec, debounce_mode === undefined ? delay - elapsed
    : delay
);

您可以查看the source code了解详情。

插件将通过设置超时ID来处理超时。