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

Reduzir o uso de memória do Chrome é uma das principais prioridades da equipe este ano. Já notamos uma redução de até 45% no uso de memória do Gmail graças a melhorias no processo de coleta de lixo do V8, mas ainda estamos no começo. Um dos nossos próximos experimentos no uso da memória é voltado para acumuladores de guias (como eu). Isso é chamado de descartamento de guias.

Nem todas as guias abertas são guias usadas. Se a memória estiver baixa, o Chrome pode descartar guias em segundo plano sem interesse.

A eliminação de guias está disponível como um experimento no Chrome 46 e versões mais recentes.

Contexto

Para cada guia aberta, nosso processo de renderização geralmente consome cerca de 50 MB por guia, mesmo que a maioria das pessoas use apenas uma guia por vez. Se você tiver 10 guias abertas, pelo menos 450 MB de memória serão usados apenas para manter o estado da guia em segundo plano. Isso pode ficar um pouco difícil com o tempo.

Memória necessária por guia

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

Gerenciador de tarefas com memória necessária

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

Como descartar guias não usadas

O descarte de guias permite que o Chrome descarte automaticamente guias que não são de grande interesse para você quando detecta que a memória do sistema está acabando. O que significa descartar? Uma guia descartada não vai a lugar nenhum. Ele é removido, mas ainda aparece na barra de guias do Chrome. Se você voltar para uma guia descartada, ela será recarregada quando você clicar nela. O conteúdo do formulário, a posição de rolagem e assim por diante são salvos e restaurados da mesma forma que seriam durante a navegação para frente/trás da guia.

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

Você pode testar o descarte de guias hoje mesmo ativando essa opção em chrome://flags/#enable-tab-discarding e reiniciando o Chrome. É possível controlar se ele está ativado ou desativado na mesma página chrome://flags do Chrome.

Ativar a captura de tela de descarte de guias.
Captura de tela do botão de reinicialização.

Uma nova página chamada chrome://discards permite listar as guias que estão abertas e tentamos compartilhar alguns insights 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, realize o comportamento de navegação normal até que o sistema esteja no modo de pouca memória ou, como alternativa, acione um descarte de guia em about:discards clicando em "Discard tab now". Isso vai 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 vai aparecer com um prefixo [Discarded].

Captura de tela de exemplo da guia "Descartados".

O descarte de guias é feito nesta ordem:

  • Páginas internas, como a 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 para Linux em breve.

As guias fixadas também são consideradas ao descartar uma guia.

Inspiração: olá, ótimo suporte

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

Captura de tela do Suspender.

Assim como no descarte de guias, as guias podem ser suspensas quando você precisar interagir com elas novamente. O Great Suspender mantém o título e o ícone 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 ícone de abas suspensas.

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

Conversamos com o autor da extensão Great Suspender enquanto desenvolvíamos o descarte de guias. Ele ficou feliz em saber que estamos resolvendo esse problema de forma nativa de maneira mais eficiente do que uma extensão, como perder o estado de inação do usuário.

Futuras melhorias: o serializador de guias

O serializador de guias é um trabalho futuro que pode levar a melhorias significativas na nossa abordagem atual de descarte de guias. Ele pega o conteúdo de uma guia do Chrome e serializa o estado *atual* dela em um blob binário. Esse blob binário pode ser desserializado mais tarde em uma guia.

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

Captura de tela do conceito do serializador

Se você usa o Android ou o ChromeOS, talvez saiba que, de forma semelhante ao experimento de descarte de guias abordado nesta postagem, removemos as guias em segundo plano de forma agressiva para garantir que o uso de memória seja baixo. O problema com a forma como abordamos isso era que a guia perdia *todo* o estado.

Quando você mostrasse interesse na guia novamente, teríamos que recarregá-la e toda sua interação com ela seria perdida. O serializador de guias aborda esse problema de uma maneira que você volte quase exatamente ao que estava sem precisar voltar à rede. Em breve, vamos compartilhar mais informações sobre esse trabalho.

Teste a exclusão de guias e nos conte o que achou

Gostaríamos de saber se esse recurso é útil para você e como ele pode ser melhorado. Teste e brinque com ele (especialmente se você é um acumulador de guias!) e deixe sua opinião nos comentários. :) Também agradecemos se você enviar solicitações de suporte para bugs encontrados em crbug.com.