mirror of
				https://github.com/taixingyiji/openit.git
				synced 2025-11-04 04:32:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
		
			941 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			941 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/** 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;
 |