Quais são as configurações corretas para acelerar agressivamente as guias em segundo plano no Firefox?
Anos atrás, encontrei este post explicando várias about:config
configurações no firefox para controlar as guias de segundo plano (e de primeiro plano), mas nunca consegui entender o significado delas. Não está claro, por exemplo, quais são as unidades de cada uma dessas opções (segundos, milissegundos?)
dom.min_background_timeout_value
dom.timeout.background_budget_regeneration_rate
dom.timeout.background_throttling_max_budget
dom.timeout.budget_throttling_max_delay
dom.timeout.foreground_budget_regeneration_rate
dom.timeout.foreground_throttling_max_budget
dom.timeout.throttling_delay
Especificamente, vamos adotar uma política de limitação superagressiva: quero fazer com que as guias em segundo plano recebam apenas 1 ms de tempo de execução a cada 30 minutos. Desejo que esta política entre em vigor 1 ms depois que a guia não estiver mais em primeiro plano. Ou seja, as guias nunca devem exceder 0,00% de uso da CPU por um período de 30 minutos após deixar uma guia em segundo plano.
Quais devem ser os valores dessas configurações do firefox para atingir esse comportamento agressivo de limitação?
Isso é possível definindo as seguintes entradas em
about:config
De acordo com a seção "Guias inativas" da documentação do mozilla em window.setTimeout :
Portanto, o valor padrão do
dom.min_background_timeout_value
firefox é de 15 minutos (na verdade, definido900,000
como a unidade é ms), o que faz sentido para um dispositivo que tenta preservar a bateria e os recursos escassos de RAM/CPU. Dobrar esse valor para atingir 30 minutos =1,800,000
.Observe que há uma entrada distinta
about:config
para scripts de rastreamento de limitação (dom.min_tracking_background_timeout_value
) que também deve ser aumentada para o mesmo valor de1,800,000
ms.Por padrão, as guias não são limitadas quando não estão mais em primeiro plano. Portanto, definimos ms para começar a limitar as guias quase imediatamente quando elas não estiverem mais em primeiro plano
dom.timeout.throttling_delay
.1
Não sei o que a maioria dessas outras
about:config
entradas faz.budget
Esses são particularmente confusos e mais esclarecimentos são bem-vindos .Para cargas de trabalho mais complexas do que o simples "acelerar muito todos os cronômetros": ou seja, permitir que os cronômetros sejam executados com mais frequência se forem curtos, também há um mecanismo de orçamento de cronômetro no Firefox. Esse mecanismo de orçamento só permite que os cronômetros sejam executados se houver um 'orçamento' para isso, que é reduzido pela quantidade de tempo que os cronômetros em uma determinada guia gastam em execução e aumentado por uma regeneração lenta. Quando é negativo, o temporizador é impedido de funcionar. Observe que o cronômetro parece ser por guia: é fortemente implícito pelo motivo do recurso que as guias que são "educadas" com seus cronômetros são recompensadas e as guias que não são punidas.
As seguintes opções em about:config podem ser usadas para ajustar isso:
dom.timeout.background_budget_regeneration_rate
reduz a taxa na qual um temporizador recebe mais tempo para funcionar. É em unidades do número de milissegundos em tempo real que deve decorrer antes que o orçamento para cronômetros de guia em segundo plano em uma guia seja aumentado em um milissegundo.dom.timeout.background_throttling_max_budget
define o número máximo de milissegundos que podem ser armazenados dentro do orçamento. Uma vez que o orçamento é tão grande, ele para de aumentar.dom.timeout.budget_throttling_max_delay
define o número máximo de milissegundos que os cronômetros em uma determinada guia podem ser forçados a esperar. Ele atua como uma substituição do restante do mecanismo orçamentário.Portanto, se a regeneração_rate for definida como 60 e o max_budget for definido como 3000, a guia ganhará um segundo de tempo de execução para cada minuto de tempo real. Se o max_budget nesse caso for definido como 3000, depois de três minutos, o orçamento manterá 3 segundos de tempo de execução e parará de aumentar: portanto, após seis minutos, ainda manterá três segundos. Digamos que o max_delay seja definido como 1000 (ou seja, o orçamento só irá reter os temporizadores por no máximo um único segundo). Observe que essas configurações estão longe de serem ideais.
Se um cronômetro na guia acima gastar cinco segundos em execução (o que é muito improvável), o orçamento seria de -2.000 milissegundos. Se outro cronômetro nessa guia expirar imediatamente, ele será forçado a esperar 2 minutos enquanto o orçamento é regenerado para um valor positivo. No entanto, como o max_delay é muito baixo (1 segundo), apenas 1 segundo se passará antes que o cronômetro seja acionado de qualquer maneira.
Como isso interage com o mecanismo de tempo limite mais tradicional descrito por Michael é desconhecido para mim. Veja esta postagem da lista de discussão para obter mais detalhes sobre o mecanismo.