Reduzir o consumo 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 às melhorias no processo de coleta de lixo do V8, mas estamos apenas começando. Um dos nossos próximos experimentos no uso de memória é voltado a colecionadores de guias (como eu). Esse recurso é chamado de descartar de tabulação.
O descarte 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 leva cerca de 50 MB por guia, mesmo que a maioria das pessoas use apenas uma guia por vez. Se você tiver 10 guias abertas, estará usando pelo menos 450 MB de memória apenas para manter o estado da guia em segundo plano. Isso pode ficar um pouco complicado com o tempo.
Um dos nossos objetivos é reduzir a memória das guias que você não está usando. Se eu observar quais guias estão consumindo a memória do meu sistema no gerenciador de tarefas do Chrome, estou apenas "usando" um ou dois dos sites abaixo, enquanto as outras guias em segundo plano não são usadas.
É por isso que descartar 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 guias que não são tão interessantes para você quando é detectado que a memória do sistema está muito baixa. O que queremos dizer com descarte? Uma guia descartada não leva a lugar nenhum. Ele será eliminado, mas ele ainda estará visível na barra de guias do Chrome. Se você voltar para uma guia que foi descartada, ela vai 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 seriam durante a navegação para frente/para trás com a guia.
Também temos outro novo recurso que permite armazenar em cache 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
.
Teste o descarte de guias hoje mesmo. Basta ativá-lo usando a
chrome://flags/#enable-tab-discarding
e reiniciar o Chrome. É possível
controlar se ele está ativado ou desativado na mesma página chrome://flags
do Chrome.
Uma nova página chamada chrome://discards
permite listar quais guias estão abertas
no momento e tentamos compartilhar alguns insights sobre o quanto elas são interessantes
para você, do mais ao menos.
Para testar o recurso, você pode executar seu comportamento normal de navegação até que o sistema esteja em um modo de pouca memória ou, como alternativa, acionar um descarte de guias de about:discards clicando em "Descartar guia agora". Isso vai descartar a última guia da lista. Também é possível descartar uma guia específica da lista clicando no botão "Descartar" correspondente. Uma guia descartada será mostrada com um prefixo [Descartar].
Ao descartar guias, estas sã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
- Guia selecionada
Ativamos o experimento de descarte de guias no Chrome Canary para Windows e Mac OS, e uma implementação para Linux será lançada em breve.
Inspiração: olá, suspensório ótimo
Se o descarte de guias parece familiar, é porque você provavelmente já conhece extensões úteis do Chrome que oferecem uma versão um pouco mais simples dessa ideia, como a Grande Suspensório. O objetivo da Great Suspend é reduzir o consumo de memória e de GPU do Chrome, suspendendo as guias após um período personalizado de inatividade.
Assim como o descarte de guias, a suspensão pode ser cancelada quando você precisar interagir com elas novamente. 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 para elas a qualquer momento.
As guias em segundo plano que não estou usando foram suspensas, economizando memória. As guias que ainda uso ativamente (GitHub e YouTube) estão sendo executadas normalmente.
Na verdade, conversamos muito com o autor da extensão Great Suspensório enquanto desenvolve o descarte de guias, e ele ainda está feliz em ver nossa solução nativa para esse problema de maneiras mais eficientes do que uma extensão poderia, por exemplo, perder o estado de inatividade do usuário.
Melhorias futuras: o serializador de guias
O serializador de guias é um trabalho futuro que pode levar a melhorias significativas na abordagem atual de descarte de guias. Ele usa 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 posteriormente em uma guia.
O serializador serializa quase tudo 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 conseguiam alcançar facilmente). A serialização incluiria os suspeitos comuns: o DOM (com muitos WebGL e Canvas incluídos), CSS e o estado da VM JavaScript V8.
Se você usa o Android ou o ChromeOS, talvez saiba que, de forma semelhante ao experimento de descarte de guias abordado 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 maneira como lidamos com isso é que sua guia perderia *todo* o estado.
Quando você mostrasse interesse na guia novamente, precisaríamos recarregá-la e toda a interação com ela seria perdida. O serializador de guias apenas aborda esse problema de uma maneira que faz com que você volte quase exatamente ao que era sem precisar voltar à rede. Esperamos compartilhar mais informações sobre esse trabalho posteriormente.
Teste o descarte de guias e nos conte o que achou
Gostaríamos de saber se esse recurso é útil para você e como é possível melhorá-lo. Faça um teste, use o recurso (principalmente se você for um colecionador de guias) e conte para nós o que achou nos comentários. :) Também gostaríamos que você enviasse tíquetes para qualquer bug que encontrar em crbug.com.