Atualizações nos recursos de animação com aceleração de hardware

Resumo: o Chromium está atualizando os recursos de aceleração de hardware automaticamente para animações SVG, transformações baseadas em porcentagem e, em breve, animações de cor de segundo plano e de caminho de clipe.

Quando se trata do desempenho da animação na Web, os termos "aceleração de hardware" e "aceleração por GPU" provavelmente serão mencionados. Mas o que isso significa? Estilos acelerados por hardware são aqueles que aproveitam a GPU (unidade de processamento gráfico) em vez da CPU (unidade central) para renderizar estilos visuais. Isso ocorre porque a GPU pode renderizar alterações visuais em uma página da Web mais rapidamente do que a CPU.

O uso da GPU para descarregar transições e animações com muitos gráficos significa visuais mais suaves e menos instabilidade, já que essas animações não são afetadas pela linha de execução principal. Ao retirá-las da linha de execução principal, as animações ignoram a quantidade de outros scripts ativos em execução na página, o que diminuiria a velocidade dos recursos visuais e criaria instabilidade.

Como ativar animações aceleradas por hardware

As animações aceleradas por hardware são compostas como camadas e ajudam os desenvolvedores a alcançar animações suaves de 60 QPS (quadros por segundo) para melhorar a performance da renderização visual. Atualmente, existem algumas maneiras de especificar e ativar animações e transições aceleradas por hardware na Web:

  • Use funções transform CSS ou faça a transição dos valores opacity ou filter
  • Adicione a propriedade will-change ao elemento.
  • Criar um desenho animado na tela usando o OffscreenCanvas
  • Criar um desenho 3D do WebGL
A equipe de renderização do Chromium está rastreando continuamente o uso das propriedades mais animadas para determinar o que vem a seguir em relação à ativação da aceleração de hardware. Enquanto as propriedades CSS atuais que são aceleradas por hardware por padrão incluem apenas opacity, filter e transform por enquanto, background-color e clip-path vão fazer parte da lista em breve.

O que mais está sendo acelerado por hardware por padrão no Chromium? Há algumas coisas que surgem pelo pipeline, incluindo animações SVG, algo que os desenvolvedores têm solicitado fortemente.

Animações SVG aceleradas por hardware

O SVG é um ótimo recurso para qualquer site, e agora essas interações com ele podem ser mais eficientes. A partir do Chromium 89, o Chrome e o Firefox serão semelhantes para ativar a aceleração de hardware por padrão nas animações SVG. O que você, desenvolvedor, precisa fazer? Nada. Isso será aplicado automaticamente para animações SVG no Chromium 89 e versões mais recentes.

Exemplo

Vamos analisar as diferenças entre uma animação SVG com e sem a aceleração de hardware ativada. Os indicadores de carregamento são elementos de interface usados com frequência, como este que aparece no facebook.com. Esses indicadores sugerem que o trabalho está sendo feito no servidor, enquanto o usuário aguarda uma resposta. No caso mostrado aqui, a resposta seria carregar resultados adicionais na barra lateral.

A interface da barra lateral do Facebook mostra um carregador circular ao carregar mais conteúdo.

Quando abrimos o DevTools, podemos começar a criar perfis e realmente ver as diferenças entre uma experiência de animação com CPU e aceleração por GPU.

Painel de desempenho com o flash de pintura ativado
Esquerda: Chromium 88. Direita: Chromium 89, com aceleração de hardware para animações SVG. Confira a demonstração de Benoit Girard em JSFiddle.

À esquerda, como o Chromium 87, a nova pintura ocorre sempre que o ícone de carregamento é animado, ou seja, continuamente. À direita, não há rede (Chromium 89 e Firefox). Podemos testar isso no painel de renderização do DevTools ao ativar o recurso de flash do Paint.

Painel de desempenho mostrando a renderização
Esquerda: Chromium 88. Direita: Chromium 89, com aceleração de hardware para animações SVG. Confira a demonstração de Benoit Girard em JSFiddle.

Olhando mais de perto no painel "Desempenho", é possível ver novamente esse efeito e como ele afeta o desempenho geral da sua propriedade da Web. Você evita completamente o tempo de renderização e pintura para a animação, o que significa animações mais suaves e aplicativos com melhor desempenho. O Facebook não enviará esse carregador baseado em SVG até que o suporte do navegador para SVG acelerado por hardware seja maior, mas isso permitiria mais flexibilidade em termos de aplicação de temas, escalonamento, requisitos de resolução e manutenção mais fácil.

Animações de porcentagem

A equipe de Interações também está oferecendo suporte a animações de transformação percentual no Chromium 89. Animações baseadas em porcentagem descrevem interações que incluem movimentos baseados em porcentagem. Por exemplo, é possível aumentar algo em 20% ou deslizar um menu responsivo de barra lateral fora da tela usando algo como translateX: -100%.

Exemplo de navegação do waze.com, que usa uma transformação percentual para abrir e ocultar o menu em telas menores.

Esses tipos de animação da interface são relativamente comuns, mas atualmente não aproveitam a aceleração de hardware porque anteriormente não era possível compor essas animações. As porcentagens em transformações dependem do tamanho da caixa (ou seja, layout). No entanto, agora, desde que o tamanho do layout não mude a cada frame, o navegador pode pré-calcular os valores de transformação absolutos e executá-los como se o desenvolvedor tivesse fornecido os valores de pixel. A boa notícia é que a equipe do Chromium está trabalhando nesse recurso e, em breve, esses tipos de animação serão compostos automaticamente e acelerados por hardware.

O que vem a seguir?

Essas animações atualizadas tornam o estilo da Web muito mais suave. E, como mencionado acima, a equipe está sempre procurando para ver as futuras necessidades da Web. No momento, planejamos converter background-color e clip-path para usar automaticamente a aceleração de hardware em versões futuras do Chromium.

background-color é uma prioridade devido à alta contagem de usos de transições e efeitos, e clip-path permite efeitos de transição muito mais eficientes em toda a Web. Quando desempenho encontra interatividade, todos saem ganhando!

transition.style: um site de demonstração que destaca os efeitos de transição CSS por Adam Argyle.

Imagem da capa: Siora Photography para Unsplash.