diff --git a/src/components/loader/tw-progress-monitor.js b/src/components/loader/tw-progress-monitor.js index 3e54500d0..07883d3dd 100644 --- a/src/components/loader/tw-progress-monitor.js +++ b/src/components/loader/tw-progress-monitor.js @@ -18,6 +18,19 @@ export const setProgressHandler = newHandler => { progressHandler(state, currentProgress, complete, total); }; +let progressHandlerTimeout = null; +const fireProgressHandler = () => { + progressHandler(state, currentProgress, complete, total); + progressHandlerTimeout = null; +}; + +const queueProgressHandlerUpdate = () => { + if (progressHandlerTimeout !== null) { + cancelAnimationFrame(progressHandlerTimeout); + } + progressHandlerTimeout = requestAnimationFrame(fireProgressHandler); +}; + const setProgress = progress => { if (progress < 0) { progress = 0; @@ -26,7 +39,7 @@ const setProgress = progress => { progress = 1; } currentProgress = progress; - progressHandler(state, progress, complete, total); + queueProgressHandlerUpdate(); }; const setState = newState => {