Substituir o comportamento setTimeout para guias inativas

Atualmente, estou desenvolvendo um jogo ponto a ponto em JavaScript usando o WebRTC. Ele trata um dos pares (ou seja, o host) como o servidor e quaisquer outros pares que ingressam se conectam ao host por meio de um servidor de intermediação node.js.

Atualmente, estou tentando resolver um problema em que o jogo para de atualizar para todos se o host alternar entre guias, para que o jogo não seja mais a guia ativa. Depois de fazer algumas pesquisas, descobri que isso ocorre porque estou usando algo como:

setTimeout(callback, 1000 / 60);

no meu loop do jogo. setTimeout (pelo menos no Chrome e Firefox, que são os navegadores com os quais me preocupo) é definido de forma que, se a página que está chamando não estiver na sua guia ativa, ela pode ser chamada no máximo uma vez por segundo.

Eu li que os Web Workers não têm essa restrição, mas para fazer esse trabalho eu precisaria executar toda a minha lógica de jogo dentro do Web Worker. Tentei enviar meu objeto de jogo para o trabalhador usando JSON.stringify (), mas ele dizia que o objeto tinha uma referência circular (no loop do jogo) e não podia ser convertido em JSON. Então, eu não tenho certeza do que fazer sobre isso.

Também examinei a implementação do meu próprio cronômetro, que continuava sendo executado, independentemente de a página estar na guia ativa, mas também não tenho certeza de como fazer isso.

Realmente não tenho nenhum problema em fazê-lo de uma dessas maneiras, ou mesmo de alguma outra maneira em que ainda não pensei, desde que isso não implique um grande gasto adicional de desempenho. Todas as sugestões serão muito apreciadas.

questionAnswers(1)

yourAnswerToTheQuestion