From cfeb8d053f0362fdd5cdb7f7c36dc157f9099b2c Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Sat, 16 Aug 2014 23:03:43 -0700 Subject: [PATCH] Attempt to throttle `seData`. --- lodash.js | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/lodash.js b/lodash.js index 0f664de6b..afec72c8b 100644 --- a/lodash.js +++ b/lodash.js @@ -3015,13 +3015,13 @@ * @param {*} data The metadata. * @returns {Function} Returns `func`. */ - function setData(func, data) { + function baseSetData(func, data) { metaMap.set(func, data); return func; } // fallback for environments without `WeakMap` if (!WeakMap) { - setData = !defineProperty ? identity : function(func, value) { + baseSetData = !defineProperty ? identity : function(func, value) { descriptor.value = value; defineProperty(func, EXPANDO, descriptor); descriptor.value = null; @@ -3029,6 +3029,31 @@ }; } + function trip(func, times, wait) { + var count = 0, + lastCalled = 0; + + return function(key, value) { + var stamp = now ? now() : 0, + remaining = wait - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count > times) { + var dataFunc = typeof value == 'object' && isFunction(dataFunc = value[0]) && dataFunc; + if (typeof getData(key) == 'undefined' && !(dataFunc && getData(dataFunc) != 'undefined')) { + return key; + } + } + } else { + count = 0; + } + return func(key, value); + } + } + + var setData = trip(baseSetData, 50, 16); + /** * A fallback implementation of `_.isPlainObject` which checks if `value` * is an object created by the `Object` constructor or has a `[[Prototype]]`