From 941b4d5b8d365653f25937961c4b931ebebd4e6f Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 28 May 2022 14:18:22 -0700 Subject: Throttle frequent updates (fix #932) --- modern/src/store/throttleMiddleware.js | 39 ++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 modern/src/store/throttleMiddleware.js (limited to 'modern/src/store/throttleMiddleware.js') diff --git a/modern/src/store/throttleMiddleware.js b/modern/src/store/throttleMiddleware.js new file mode 100644 index 00000000..9954b139 --- /dev/null +++ b/modern/src/store/throttleMiddleware.js @@ -0,0 +1,39 @@ +import { batch } from "react-redux"; + +const threshold = 3; +const interval = 1500; + +export default () => (next) => { + const buffer = []; + let throttle = false; + let counter = 0; + + setInterval(() => { + console.log('batch'); + if (throttle) { + if (buffer.length < threshold) { + throttle = false; + } + batch(() => buffer.splice(0, buffer.length).forEach((action) => next(action))); + } else { + if (counter > threshold) { + throttle = true; + } + counter = 0; + } + }, interval); + + return (action) => { + console.log(action); + if (action.type === 'devices/update' || action.type === 'positions/update') { + if (throttle) { + buffer.push(action); + } else { + counter += 1; + return next(action); + } + } else { + return next(action); + } + }; +}; -- cgit v1.2.3