You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					38 lines
				
				941 B
			
		
		
			
		
	
	
					38 lines
				
				941 B
			| 
								 
											3 years ago
										 
									 | 
							
								/** 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;
							 |