As guias em segundo plano podem ter um efeito negativo no desempenho do navegador, especialmente na duração da bateria. Para mitigar isso, o Chrome colocou várias restrições nas guias em segundo plano nos últimos anos. Recentemente, houve uma série de esforços para fazer mais melhorias, e este documento mostra uma visão geral da política do Chrome. Este documento se concentra em descrever as políticas atuais no Chrome 57. Estratégia de longo prazo e outros planos podem ser encontrados em neste documento.
Otimizar um aplicativo para segundo plano
Os desenvolvedores Web devem estar cientes de que os usuários geralmente têm muitas guias abertas em segundo plano e isso pode ter um efeito sério no uso de energia e na duração da bateria. Trabalho em segundo plano devem ser reduzidos ao mínimo, a menos que seja absolutamente necessário fornecer uma experiência específica do usuário. O API Page Visibility deve ser usado para detectar quando a página está em segundo plano e suspender todo trabalho desnecessário, como atualizações visuais.
Em alguns sites, Essa otimização simples pode reduzir o uso da CPU em até 75%:
var doVisualUpdates = true;
document.addEventListener('visibilitychange', function(){
doVisualUpdates = !document.hidden;
});
function update() {
if (!doVisualUpdates) {
return;
}
doStuff();
}
Políticas
requestAnimationFrame()
De acordo com a documentação,
O Chrome não chama requestAnimationFrame()
quando uma página está em segundo plano.
Esse comportamento está em vigor desde 2011.
Alinhamento do timer em segundo plano
Desde o Chrome 11, cada timer independente não é executado mais do que uma vez por segundo. O Chrome executa esses temporizadores em lotes uma vez por segundo, garantindo que o número de ativações de processo seja mantido no mínimo. As páginas que tocam áudio audível são consideradas visíveis para o usuário e estão isentas da limitação de timer em segundo plano. A isenção dura vários segundos depois que o áudio é interrompido para permitir para colocar a próxima faixa de áudio na fila.
O áudio é considerado audível apenas quando o Chrome mostra o ícone de áudio. Streams de áudio silenciosos não concedem isenções.
Limitação de timers em segundo plano com base no orçamento
Envio no Chrome 57, a limitação de timer com base no orçamento é uma extensão do mecanismo de alinhamento de timer, colocando um limite adicional no uso da CPU do timer em segundo plano. Ele funciona da seguinte maneira:
- Cada guia em segundo plano tem um orçamento de tempo (em segundos) para executar timers em segundo plano.
- Uma página está sujeita a limitações de orçamento de tempo após 10 segundos em segundo plano.
- Uma tarefa de timer só pode ser executada quando o orçamento de tempo é não negativo.
- Depois que um timer é executado, o tempo de execução é subtraído do orçamento.
- O orçamento é continuamente renovado ao longo do tempo (atualmente definido como uma taxa de 0,01 segundo por segundo). Essa taxa de regeneração do orçamento pode ser ajustada à medida que o Chrome coleta mais dados sobre o comportamento de limitação.
Há algumas exceções automáticas a essa limitação:
- Os aplicativos que reproduzem áudio são considerados em primeiro plano e não são limitados.
- Aplicativos com conexões em tempo real (WebSockets e WebRTC), para evitar o fechamento dessas conexões por tempo limite. A regra de tempo de execução uma vez por segundo ainda aplicados nesses casos.
Observe que esse mecanismo usa tempo decorrido, não tempo de CPU. É uma boa aproximação do tempo de CPU e penaliza o bloqueio da linha de execução principal por um muito tempo.
Por fim, lembre-se de que, se você estiver usando tarefas longas em segundo plano, seu aplicativo
pode ser limitado por um período muito longo (até 100 vezes a duração da tarefa).
Divida seu trabalho em partes de 50 ms ou menos de acordo com
as diretrizes de desempenho
e use o listener visibilityChange
para evitar trabalhos desnecessários em segundo plano.
Exclusão
O Chrome fornece a flag --disable-background-timer-throttling
para casos de uso como
executar conjuntos de testes e outras computações pesadas autorizadas pelo usuário.