Merge pull request #2709 from WesleyAC/improve-polling-backoff

Improve polling algorithm
This commit is contained in:
Mouse Reeve 2023-03-08 18:36:19 -08:00 committed by GitHub
commit 2f737efeff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -95,7 +95,6 @@ let BookWyrm = new (class {
/** /**
* Update a counter with recurring requests to the API * Update a counter with recurring requests to the API
* The delay is slightly randomized and increased on each cycle.
* *
* @param {Object} counter - DOM node * @param {Object} counter - DOM node
* @param {int} delay - frequency for polling in ms * @param {int} delay - frequency for polling in ms
@ -104,16 +103,19 @@ let BookWyrm = new (class {
polling(counter, delay) { polling(counter, delay) {
const bookwyrm = this; const bookwyrm = this;
delay = delay || 10000; delay = delay || 5 * 60 * 1000 + (Math.random() - 0.5) * 30 * 1000;
delay += Math.random() * 1000;
setTimeout( setTimeout(
function () { function () {
fetch("/api/updates/" + counter.dataset.poll) fetch("/api/updates/" + counter.dataset.poll)
.then((response) => response.json()) .then((response) => response.json())
.then((data) => bookwyrm.updateCountElement(counter, data)); .then((data) => {
bookwyrm.updateCountElement(counter, data);
bookwyrm.polling(counter, delay * 1.25); bookwyrm.polling(counter);
})
.catch(() => {
bookwyrm.polling(counter, delay * 1.1);
});
}, },
delay, delay,
counter counter