/* This Source Code Form is subject to the terms of the Mozilla Public *License,v.2.0.IfacopyoftheMPLwasnotdistributedwiththis
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
// setImmediate is only defined when running in the worker thread /* globals setImmediate */
/** *Fromunderscore's`_.throttle` *http://underscorejs.org *(c)2009-2014JeremyAshkenas,DocumentCloudandInvestigativeReporters&Editors *UnderscoremaybefreelydistributedundertheMITlicense. * *Returnsafunction,that,wheninvoked,willonlybetriggeredatmostonceduringa *givenwindowoftime.Thethrottledfunctionwillrunasmuchasitcan,withoutever *goingmorethanonceperwaitduration. * *@param{Function}func *Thefunctiontothrottle *@param{number}wait *Thewaitperiod *@param{object}scope *Thescopetouseforfunc *@return{Function}Thethrottledfunction
*/ function throttle(func, wait, scope) {
let args, result;
let timeout = null;
let previous = 0;
const later = function () {
previous = Date.now();
timeout = null;
result = func.apply(scope, args);
args = null;
};
const throttledFunction = function () { const now = Date.now(); const remaining = wait - (now - previous);
args = arguments; if (remaining <= 0) { if (!isWorker) {
clearTimeout(timeout);
}
timeout = null;
previous = now;
result = func.apply(scope, args);
args = null;
} elseif (!timeout) { // On worker thread, we don't have access to privileged setTimeout/clearTimeout // API which wouldn't be frozen when the worker is paused. So rely on the privileged // setImmediate function which executes on the next event loop. if (isWorker) {
setImmediate(later);
timeout = true;
} else {
timeout = setTimeout(later, remaining);
}
} return result;
};
function cancel() { if (timeout) { if (!isWorker) {
clearTimeout(timeout);
}
timeout = null;
}
previous = 0;
args = undefined;
result = undefined;
}
function flush() { if (!timeout) { return result;
}
previous = 0; return throttledFunction();
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.