##Debounce

Use this a lot to delay user/server interaction to keep requests low

var debounce = function (func, threshold, execAsap) 
{

    var timeout;

    return function debounced () 
    {
        var obj = this, args = arguments;
        function delayed () {
            if (!execAsap)
                func.apply(obj, args);
            timeout = null; 
        };

        if (timeout)
            clearTimeout(timeout);
        else if (execAsap)
            func.apply(obj, args);

        timeout = setTimeout(delayed, threshold || 100); 
    };
}

source