A tool for load balancing within the limit of a single frame and not only.
npm i --save @perf-tools/balancer
Often, need to reduce the load, for example when listening to the onscroll
event or take the operation as deferred. Usually, in such a situation we use:
debounce
and throttle
. These are very good tools, but sometimes want more,
namely controlling the execution within one frame of the animation or use idle-process.
It is for this created @perf-tools/balancer
. You add deferred calls into it,
and it controls that their execution does not take more than 13ms, otherwise it
moves them to idle-process.
- call — add a deferred call to a balancer
- debounce — created a debounced function
- cancel — cancel a deferred call
- uniqueKey — a factory of unique keys to replacing a deferred call, with the same key
- Bits — advanced knowledge
Add a deferred call to a balancer.
- fn:
Function
- ctx:
object
- args:
any[]
- options:
TaskOptions
- key:
TaskUniqueKey
- flags:
number
— a bitmask
- key:
import {call} from '@perf-tools/balancer';
call(function () {
// some code
});
Created a debounced function
- fn:
Function
- ctx:
object
- args:
any[]
- options:
TaskOptions
- key:
TaskUniqueKey
- flags:
number
— a bitmask
- key:
import {debounce} from '@perf-tools/balancer';
const handleScroll = debounce(function () {
// some code
});
// Or boosted (without arguments)
// const handleScroll = debounce(function () {}, null, null, {flags: F_NO_ARGS});
document.addEventListener('scroll', handleScroll, true);
// Anywhere else
handleScroll.cancel(); // cancel a deferred call
document.addEventListener('scroll', handleScroll, true);
Cancel a deferred call
- task:
Task
— the task of a deferred call
import {call, cancel} from '@perf-tools/balancer';
const task = call(function () {
// some code
});
// Anywhere else
cancel(task);
A factory of unique keys to replacing a deferred call, with the same key
- name:
name
— any name (does not affect anything)
import {call, uniqueKey} from '@perf-tools/balancer';
const key = uniqueKey('demo');
call(function () { console.log('One'); }, null, [], {key});
call(function () { console.log('Two'); }, null, [], {key});
// Console output:
// Two
F_CTX
— use free a contextF_NO_ARGS
— ignore arguments for boost performance a debounced functionF_IMPORTANT
— even if the task is too heavy, it will not be moved to the idle-process and will continue to run per frame
npm i
npm test
, code coverage