As guias em segundo plano podem ter um efeito negativo significativo no desempenho do navegador, especialmente na duração da bateria. Para reduzir esse problema, o Chrome tem colocado várias restrições nas guias em segundo plano nos últimos anos. Recentemente, fizemos vários esforços para fazer mais melhorias, e este documento oferece uma visão geral da política do Chrome. Este documento se concentra na descrição das políticas atuais do Chrome 57. A estratégia de longo prazo e outros planos podem ser encontrados neste documento.
Otimizar um aplicativo para segundo plano
Os desenvolvedores da Web precisam saber 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. O trabalho em segundo plano deve ser mantido no mínimo, a menos que seja absolutamente necessário para oferecer uma experiência de usuário específica. A API Page Visibility precisa ser usada para detectar quando a página está em segundo plano e suspender todo o 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 é executado no máximo 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 que os aplicativos enfileirem a próxima faixa de áudio.
O áudio é considerado audível apenas quando o Chrome mostra o ícone de áudio. Os streams de áudio silenciosos não concedem isenções.
Limitação do timer em segundo plano baseada em 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 cronômetros em segundo plano.
- Uma página fica 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 nova geração de 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 de uma vez por segundo ainda é aplicada nesses casos.
Esse mecanismo usa o tempo real, não o tempo da CPU. Essa é uma boa aproximação do tempo de CPU e penaliza o bloqueio da linha de execução principal por longo tempo.
Por fim, lembre-se de que, se você estiver usando tarefas longas em segundo plano, seu aplicativo
poderá 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.