Descarte de guias no Google Chrome: um experimento de economia de memória

Addy Osmani
Addy Osmani

Reduzir o consumo de memória do Chrome é uma das prioridades da equipe neste ano. Já vimos uma redução de até 45% no uso de memória do Gmail graças às melhorias no processo de coleta de lixo do V8, mas estamos apenas começando. Um dos nossos próximos experimentos de uso de memória é voltado para acumuladores de guias (como eu). Esse recurso é chamado Descarte de guia.

Nem todas as guias abertas são usadas. Se você estiver com pouca memória, o Chrome poderá descartar guias desinteressantes em segundo plano.

O descarte de guias está disponível como um experimento no Chrome 46 e versões mais recentes.

Contexto

Para cada guia aberta, o processo do renderizador geralmente leva cerca de 50 MB, embora a maioria das pessoas use apenas uma guia por vez. Se você estiver com 10 guias abertas, há pelo menos 450 MB de memória sendo gasto apenas para manter o estado da guia em segundo plano. Isso pode ficar um pouco complicado com o tempo.

Memória necessária por guia

Um dos nossos objetivos é reduzir a memória usada nas guias que você não está usando. Se eu analisar quais guias estão consumindo minha memória do sistema no gerenciador de tarefas do Chrome, estarei "usando" um ou dois dos sites abaixo, enquanto as outras guias em segundo plano não são usadas.

Gerenciador de tarefas necessário de memória

É aí que o descarte de guias pode ajudar a reduzir o uso da memória.

Como descartar guias não usadas

O descarte de guias permite que o Chrome descarte automaticamente as guias que não são de seu interesse quando detectar que a memória do sistema está muito baixa. O que queremos dizer com "descarte"? Bem, uma guia descartada não vai a lugar nenhum. Nós o eliminamos, mas ele continua visível na barra de guias do Chrome. Se você voltar a uma guia que foi descartada, ela será atualizada quando clicada. O conteúdo do formulário, a posição de rolagem e assim por diante são salvos e restaurados da mesma forma que fariam durante a navegação nas guias para frente/para trás.

Também temos outro recurso que permite armazenar todos os recursos da guia localmente, o que funciona bem com o descarte de guias quando você está off-line. Quando a guia é reativada, oferecemos a opção de recarregar a versão em cache que foi carregada anteriormente pela rede. Para ativar o recarregamento da página a partir do cache, teste outro experimento em chrome://flags/#show-saved-copy.

Para testar o descarte da guia hoje, ative-a em chrome://flags/#enable-tab-discarding e reinicie o Chrome. É possível controlar se ele é ativado ou desativado na mesma página do chrome://flags do Chrome.

Ativar o descarte de captura de tela da guia.
Captura de tela do botão "Reiniciar".

Uma nova página chamada chrome://discards permite listar quais guias estão abertas no momento e tentamos compartilhar algumas informações sobre o quanto elas são interessantes para você, da mais para a menos.

Captura de tela da página de guias descartadas.

Para testar o recurso, você pode realizar seu comportamento de navegação normal até que o sistema esteja em modo de pouca memória ou, como alternativa, acionar uma guia descartar de about:discards clicando em "Descartar guia agora". Isso descartará a última guia da lista. Você também pode descartar uma guia específica da lista clicando no botão "Descartar" correspondente. Uma guia descartada será exibida com um prefixo [Descartado].

Captura de tela do exemplo de guia descartada.

Ao descartar a guia, as guias serão descartadas nesta ordem:

  • Páginas internas, como página nova guia, favoritos etc.
  • Guias selecionadas há muito tempo
  • Guias selecionadas recentemente
  • Apps em execução em uma janela
  • Guias fixadas
  • A guia selecionada

Ativamos o experimento de descarte de guias no Chrome Canary para Windows e Mac OS, com uma implementação do Linux em breve.

As guias fixadas também são consideradas ao decidir se uma guia deve ser descartada

Inspiração: olá, ótimo suspensório

Se o descarte de guias parece familiar, é porque você provavelmente já encontrou extensões úteis do Chrome que oferecem uma versão um pouco mais simples dessa ideia, como a The Great Suspender. O objetivo da Great Suspensório é reduzir o consumo de memória e GPU do Chrome suspenso as guias após um período personalizado de inatividade.

Captura de tela sobre suspensórios.

Assim como o descarte de guias, a suspensão das guias pode ser cancelada quando você precisar interagir com elas de novo. A Great Suspender mantém o título e o favicon de cada guia, mostrando as guias suspensas em um estado esmaecido, facilitando a navegação de volta a elas a qualquer momento.

Captura de tela do favicon das guias suspensas.

As guias em segundo plano que não estou usando ativamente foram suspensas, economizando na memória. No entanto, as guias que ainda estou usando ativamente (GitHub e YouTube) ainda estão funcionando normalmente.

Na verdade, tivemos uma ótima conversa com o autor da extensão Great Suspensório durante o desenvolvimento do descarte de guias, e ele está feliz por ver como estamos lidando de forma nativa com esse problema de maneiras mais eficientes do que uma extensão, como perder o estado das inatividades do usuário.

Futuras melhorias: o serializador de guias

O serializador de guias é um trabalho futuro que acreditamos que possa levar a melhorias significativas na nossa abordagem atual de descarte de guias. Ele usa o conteúdo de uma guia do Chrome e serializa o estado *atual* em um blob binário. É possível desserializar esse blob binário em uma guia posteriormente.

O serializador serializa quase tudo que o Chrome, o Blink e o V8 precisam preservar corretamente uma guia, algo que as extensões do Chrome que enfrentam esse problema historicamente não conseguiram fazer com facilidade. A serialização incluiria os suspeitos habituais: o DOM (com muitos WebGL e Canvas incluídos), o CSS e o estado da VM JavaScript V8.

Captura de tela do conceito do serializador

Se você usa o Android ou o ChromeOS, talvez já saiba que, assim como a guia de descarte do experimento abordada nesta postagem, encerramos as guias em segundo plano de forma agressiva para garantir que o uso da memória seja baixo. O problema com a forma como tratamos isso era que sua guia perdia *todo* o estado.

Quando você mostrou interesse na guia novamente, teríamos que recarregá-la, e toda sua interação com ela seria perdida. O serializador de guias apenas aborda esse problema de uma forma que leva você de volta quase exatamente ao que era sem precisar voltar à rede. Esperamos compartilhar mais informações sobre esse trabalho em breve.

Experimente o descarte de guias e nos conte o que você achou

Gostaríamos de saber se esse recurso é útil para você e como ele pode ser aprimorado. Faça um teste, faça testes (especialmente se você coleciona guias) e deixe sua opinião nos comentários. :) Também agradeceremos se você registrar tíquetes sobre qualquer bug encontrado em crbug.com.