aboutsummaryrefslogtreecommitdiff
path: root/modern/src/store/throttleMiddleware.js
diff options
context:
space:
mode:
authorAnton Tananaev <anton@traccar.org>2022-05-28 14:18:22 -0700
committerAnton Tananaev <anton@traccar.org>2022-05-28 14:18:22 -0700
commit941b4d5b8d365653f25937961c4b931ebebd4e6f (patch)
treef059067a816e024ddc790e901702e6180503231b /modern/src/store/throttleMiddleware.js
parentb61bf1e1ca6a8ff2ef3cacd4c38d57f6a46ee69b (diff)
downloadtrackermap-web-941b4d5b8d365653f25937961c4b931ebebd4e6f.tar.gz
trackermap-web-941b4d5b8d365653f25937961c4b931ebebd4e6f.tar.bz2
trackermap-web-941b4d5b8d365653f25937961c4b931ebebd4e6f.zip
Throttle frequent updates (fix #932)
Diffstat (limited to 'modern/src/store/throttleMiddleware.js')
-rw-r--r--modern/src/store/throttleMiddleware.js39
1 files changed, 39 insertions, 0 deletions
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);
+ }
+ };
+};