perf: experiment with createLoop

This commit is contained in:
cha0s 2022-03-15 15:37:05 -05:00
parent e20c2c8a4d
commit 7ddab285f7

View File

@ -1,13 +1,23 @@
export const createLoop = (ticker, {frequency = 1 / 60, sampler = Date.now} = {}) => {
export const createLoop = (
ticker,
{
frequency = 1 / 60,
sampler = window.performance.now.bind(window.performance),
} = {},
) => {
let lastTime = sampler();
let remain = 0;
return setInterval(
() => {
const now = sampler();
const elapsed = (now - lastTime) / 1000;
remain += (now - lastTime) / 1000;
lastTime = now;
ticker(elapsed);
while (remain > frequency) {
ticker(frequency);
remain -= frequency;
}
},
1000 * frequency,
3,
);
};