Spaces:
Runtime error
Runtime error
/** Used to detect hot functions by number of calls within a span of milliseconds. */ | |
var HOT_COUNT = 800, | |
HOT_SPAN = 16; | |
/* Built-in method references for those with the same name as other `lodash` methods. */ | |
var nativeNow = Date.now; | |
/** | |
* Creates a function that'll short out and invoke `identity` instead | |
* of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` | |
* milliseconds. | |
* | |
* @private | |
* @param {Function} func The function to restrict. | |
* @returns {Function} Returns the new shortable function. | |
*/ | |
function shortOut(func) { | |
var count = 0, | |
lastCalled = 0; | |
return function() { | |
var stamp = nativeNow(), | |
remaining = HOT_SPAN - (stamp - lastCalled); | |
lastCalled = stamp; | |
if (remaining > 0) { | |
if (++count >= HOT_COUNT) { | |
return arguments[0]; | |
} | |
} else { | |
count = 0; | |
} | |
return func.apply(undefined, arguments); | |
}; | |
} | |
module.exports = shortOut; | |