Histórico: estou fazendo alguns testes na interface do usuário que precisam detectar se as pessoas estão prestando atenção ou não. Mas, essa pergunta não é sobre a API de visibilidade da página .
Especificamente, gostaria de saber como meu código Javascript será afetado se a guia atual não estiver ativa ou a janela do navegador não estiver ativa em diferentes navegadores. Eu desenterrei o seguinte até agora:
- O iOS 5 pausa o javascript quando a guia não está ativa
setInterval
e osetTimeout
atraso é reduzido quando as guias não estão ativas - parece que isso começou a aparecer recentemente e pode atrapalhar os testes de unidade do Jasmine, em torno de outras coisas.requestAnimationFrame
fica mais lento quando a guia não está ativa (razoável, não consigo pensar por que isso afetaria demais alguém)
Tenho as seguintes perguntas:
- Além dos navegadores móveis, os navegadores da área de trabalho pausam a execução de JS quando uma guia não está ativa? Quando e quais navegadores?
- Quais navegadores reduzem a
setInterval
repetição? É apenas reduzido a um limite ou a uma porcentagem? Por exemplo, se eu tiver uma repetição de 10 ms contra uma repetição de 5000 ms, como cada uma será afetada? - Essas mudanças acontecem se a janela estiver fora de foco, em vez de apenas a guia? (Imagino que seria mais difícil de detectar, pois requer a API do SO).
- Existem outros efeitos que não seriam observados em uma guia ativa? Eles poderiam atrapalhar coisas que seriam executadas corretamente (ou seja, os testes Jasmine mencionados)?
setInterval
/ setTimeout
vezes sob 1000ms são alterados para 1000 ms quando o separador / janela está borrada
setInterval
/ setTimeout
times abaixo de 1000ms são alterados para 1000ms quando a guia / janela está embaçada. Não está claro o que você tentou transmitir