| /** 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;
 |