Drop pending XHR in refresh timers
Some/all XHR polling timers don’t drop a pending XHR to the same API endpoint before sending a new request. When many requests hang for some reason, they cumulate and are throttled by the browser, making the frontend partially unresponsive. This was discovered when I had a temporary issue with the ‘chats’ endpoint hanging on my personal instance, and it rendered the whole frontend unusable. A possible fix may be to set a timeout on the XHR equal to the polling interval.