fix: use worker to prevent timer throttling #1557
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Browsers start throttling timers (intervals, timeouts) in background tabs after a period of inactivity. We use timers to send health checks, and missing health checks cause participant to be disconnected.
An active WebRTC connection on a page usually means the page is never considered inactive by the browser, and therefore timers are not throttled. But it's still possible to be in a call and not have an active connection, e.g. if nobody is publishing neither audio nor video.
To handle situations like this, we move timers to a web worker, which are never throttled. Web worker then posts messages to the page on the specified intervals.
Web workers might not be available (banned by CSP, running on Node, etc), so there's also a fallback mode that uses regular timers on the page side.