Domine Animações e Efeitos Visuais com JavaScript Puro
Entenda Reflow e Repaint para Otimizar Performance Web
Quando trabalhamos em aplicações web que interagem intensamente com o DOM
Introdução ao DOM e Seleção de ElementosDescubra como o DOM transforma o HTML em uma árvore de objetos. Aprenda a selecionar e manipular elementos com métodos JavaScript para páginas dinâmicas., uma das maiores preocupações é manter a experiência do usuário fluida e responsiva
Responsividade com HTML: Viewport e `<picture>`Descubra como usar a meta viewport e o elemento picture para imagens responsivas, garantindo desempenho, usabilidade e SEO de qualidade.. Nesse contexto, entender bem como reflow (refluxo) e repaint (repintura) acontecem pode ser determinante para otimizar a performance
Debugging e Ferramentas de Desenvolvimento do NavegadorAprenda a depurar código JavaScript com as Ferramentas do Navegador. Use console, breakpoints e debugger para solucionar bugs de forma prática. do seu projeto. Neste tutorial, exploraremos os conceitos básicos do processo de renderização, como os reflows afetam o desempenho e quais técnicas podem ser usadas para minimizá-los.
O que é Fluxo de Renderização?🔗
O navegador, ao receber o código HTML
O que é HTML? Fundamentos, História e Evolução da LinguagemDescubra a origem e evolução do HTML, entendendo sua importância na estrutura da web e como influenciou o desenvolvimento digital moderno., constrói a árvore DOM
Introdução ao DOM e Seleção de ElementosDescubra como o DOM transforma o HTML em uma árvore de objetos. Aprenda a selecionar e manipular elementos com métodos JavaScript para páginas dinâmicas. e, em seguida, processa o CSS para determinar como cada elemento deve ser exibido. Na sequência, realiza o cálculo de layout (definindo posição e dimensões dos elementos
Tags e Elementos: Sintaxe e HierarquiaDescubra os fundamentos do HTML: aprenda sobre tags, elementos, hierarquia e boas práticas para criar páginas bem estruturadas e acessíveis.) e então faz a pintura (renderizando as cores, bordas e texto na tela).
Podemos representar o fluxo simplificado em um diagrama de processo:
1. Criação da DOM
Introdução ao DOM e Seleção de ElementosDescubra como o DOM transforma o HTML em uma árvore de objetos. Aprenda a selecionar e manipular elementos com métodos JavaScript para páginas dinâmicas. e CSSOM: O navegador lê e interpreta o HTML e o CSS, montando duas estruturas de dados
Fundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web. (árvore DOM e CSSOM).
2. Cálculo de Layout: O navegador decide a posição e o tamanho de cada elemento
Tags e Elementos: Sintaxe e HierarquiaDescubra os fundamentos do HTML: aprenda sobre tags, elementos, hierarquia e boas práticas para criar páginas bem estruturadas e acessíveis.. É aqui que ocorrem os reflows.
3. Pintura: Depois do layout definido, ocorre a pintura visual de cada nó do DOM
Introdução ao DOM e Seleção de ElementosDescubra como o DOM transforma o HTML em uma árvore de objetos. Aprenda a selecionar e manipular elementos com métodos JavaScript para páginas dinâmicas. na tela.
Reflow vs. Repaint🔗
- Reflow (Refluxo): Acontece quando o navegador precisa recalcular o layout de parte ou de toda a página. Isso ocorre geralmente após mudanças estruturais ou de dimensionamento em elementos
Tags e Elementos: Sintaxe e HierarquiaDescubra os fundamentos do HTML: aprenda sobre tags, elementos, hierarquia e boas práticas para criar páginas bem estruturadas e acessíveis. do DOM (por exemplo, alterações em estilos que influenciam tamanho, margem, borda, estilo de fonte ou mudanças diretas no conteúdo de width, height, etc.). - Repaint (Repintura): Ocorre quando apenas a aparência
Relação entre HTML e CSSDescubra como HTML e CSS trabalham juntos para criar páginas web esteticamente agradáveis e bem estruturadas, facilitando a manutenção e o desempenho. de um elemento é alterada, sem afetar o fluxo de layout. Mudar somente a cor de fundo
Seletores e Propriedades CSS EssenciaisAprenda a dominar o CSS com nosso tutorial completo: entenda seletores, propriedades essenciais e técnicas para criar layouts modernos e atrativos. de um elemento, por exemplo, pode disparar apenas um repaint, pois não muda a posição nem o tamanho de ninguém.
O reflow é considerado mais custoso que o repaint porque envolve o recálculo das posições de múltiplos elementos, sobretudo se a mudança ocorrer no início de uma hierarquia com diversos filhos no DOM. Já o repaint é, em geral, menos pesado, pois a posição dos elementos
Tags e Elementos: Sintaxe e HierarquiaDescubra os fundamentos do HTML: aprenda sobre tags, elementos, hierarquia e boas práticas para criar páginas bem estruturadas e acessíveis. permanece intacta.
Causas de Reflow Excessivo🔗
Alterações repetitivas no DOM
Introdução ao DOM e Seleção de ElementosDescubra como o DOM transforma o HTML em uma árvore de objetos. Aprenda a selecionar e manipular elementos com métodos JavaScript para páginas dinâmicas. podem gerar vários reflows em sequência. Abaixo, alguns gatilhos comuns:
1. Inserção ou Remoção de Elementos
Tags e Elementos: Sintaxe e HierarquiaDescubra os fundamentos do HTML: aprenda sobre tags, elementos, hierarquia e boas práticas para criar páginas bem estruturadas e acessíveis.: Adicionar, remover ou mover elementos
Tags e Elementos: Sintaxe e HierarquiaDescubra os fundamentos do HTML: aprenda sobre tags, elementos, hierarquia e boas práticas para criar páginas bem estruturadas e acessíveis. no DOM força um recálculo de layout.
2. Leitura e Escrita Alternadas no DOM
Introdução ao DOM e Seleção de ElementosDescubra como o DOM transforma o HTML em uma árvore de objetos. Aprenda a selecionar e manipular elementos com métodos JavaScript para páginas dinâmicas.: Acesso a propriedades
Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. como offsetWidth ou offsetHeight imediatamente seguido de uma mudança
Eventos no JavaScript: onClick, onChange e maisDescubra como os eventos em JavaScript, como onClick e onChange, possibilitam interações dinâmicas e melhoram a experiência do usuário em páginas web. no estilo pode forçar o navegador a atualizar o layout para fornecer valores atualizados.
3. Mudanças
Eventos no JavaScript: onClick, onChange e maisDescubra como os eventos em JavaScript, como onClick e onChange, possibilitam interações dinâmicas e melhoram a experiência do usuário em páginas web. de Estilo: Qualquer alteração em propriedades CSS que envolvem cálculo de espaço (margens, larguras, alturas, bordas e posicionamentos
Posicionamento: static, relative, absolute, fixed, stickyDescubra como usar os métodos de posicionamento CSS, de static a sticky, para criar layouts interativos, precisos e eficazes.).
4. Tamanho da Janela ou Rolagem
Overflow e Controle de ConteúdoAprenda a controlar a propriedade overflow em CSS, dominando rolagem, ocultação de conteúdo e textos longos para layouts responsivos e acessíveis.: Redimensionar a janela ou forçar rolagem
Overflow e Controle de ConteúdoAprenda a controlar a propriedade overflow em CSS, dominando rolagem, ocultação de conteúdo e textos longos para layouts responsivos e acessíveis. pode exigir um reflow parcial ou total.
Estratégias para Minimizar Reflows🔗
Agrupando Escritas e Leituras no DOM
Sempre que você mistura leituras (por exemplo, pegar offsetHeight) e escritas (alterar estilos) de forma desenfreada, o navegador é forçado a recalcular o layout múltiplas vezes.
- Forma não otimizada (vários reflows):
const box = document.getElementById('box');
// Lê o tamanho atual: reflow + repaint
const largura = box.offsetWidth;
// Muda o estilo: reflow + repaint
box.style.width = (largura + 50) + 'px';
// Lê de novo: reflow + repaint
const novaLargura = box.offsetWidth;
- Forma otimizada (um único reflow):
const box = document.getElementById('box');
// Lê todas as infos necessárias
const larguraAtual = box.offsetWidth;
const alturaAtual = box.offsetHeight;
// Realiza as alterações de estilo em sequência
box.style.width = (larguraAtual + 50) + 'px';
box.style.height = (alturaAtual + 50) + 'px';
// Somente depois, se for realmente necessário, faz nova leitura
const novaDimensao = box.offsetWidth;
Dessa forma, combinamos as leituras antes de efetuar as escritas. Isso reduz o número de recalculagens de layout e, consequentemente, otimiza o desempenho
Debugging e Ferramentas de Desenvolvimento do NavegadorAprenda a depurar código JavaScript com as Ferramentas do Navegador. Use console, breakpoints e debugger para solucionar bugs de forma prática..
Alterando Classes em Bloco
Em vez de alterar várias propriedades
Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. de estilo individualmente em um loop, outra abordagem comum é aplicar uma classe pré-definida em bloco, causando uma única operação de reflow. Por exemplo:
// Supondo que a nova classe "expanded-box" já esteja definida no CSS
box.classList.add('expanded-box');
alterações de margens, padding ou outras propriedades
Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. podem ser feitas via CSS nessa única classe. O navegador processa todas de uma só vez.
Manipulando Elementos “Fora do Fluxo”
Em alguns casos, pode valer a pena:
- Usar
positionou
Posicionamento: static, relative, absolute, fixed, stickyDescubra como usar os métodos de posicionamento CSS, de static a sticky, para criar layouts interativos, precisos e eficazes.: absolutefixedpara elementos
Posicionamento: static, relative, absolute, fixed, stickyDescubra como usar os métodos de posicionamento CSS, de static a sticky, para criar layouts interativos, precisos e eficazes.
Tags e Elementos: Sintaxe e HierarquiaDescubra os fundamentos do HTML: aprenda sobre tags, elementos, hierarquia e boas práticas para criar páginas bem estruturadas e acessíveis. animados, evitando que eles forcem o reflow de seus irmãos dentro do layout. - Trabalhar com
documentFragmentpara inserir vários nós de uma só vez no DOM
Introdução ao DOM e Seleção de ElementosDescubra como o DOM transforma o HTML em uma árvore de objetos. Aprenda a selecionar e manipular elementos com métodos JavaScript para páginas dinâmicas., em vez de inserir nó por nó.
Essas práticas ajudam a isolar a parte que sofre mudanças
Eventos no JavaScript: onClick, onChange e maisDescubra como os eventos em JavaScript, como onClick e onChange, possibilitam interações dinâmicas e melhoram a experiência do usuário em páginas web. constantes, deixando todo o resto da página intacto.
Utilizando requestAnimationFrame
Para animações
Animações e Efeitos com JavaScript PuroAprenda a criar animações e efeitos visuais usando JavaScript puro. Descubra técnicas que combinam performance e criatividade para interações web surpreendentes, uma forma de evitar reflows “espalhados” é usar requestAnimationFrame. Assim, o navegador gerencia as mudanças
Animações e Efeitos com JavaScript PuroAprenda a criar animações e efeitos visuais usando JavaScript puro. Descubra técnicas que combinam performance e criatividade para interações web surpreendentes
Eventos no JavaScript: onClick, onChange e maisDescubra como os eventos em JavaScript, como onClick e onChange, possibilitam interações dinâmicas e melhoram a experiência do usuário em páginas web. de forma sincronizada com o próximo frame de atualização:
function animar(elemento, progresso) {
elemento.style.transform = `translateX(${progresso}px)`;
}
let posicao = 0;
function passo() {
posicao += 5;
animar(document.getElementById('objetoAnimado'), posicao);
if (posicao < 200) {
requestAnimationFrame(passo);
}
}
// Inicia animação
requestAnimationFrame(passo);
Dessa maneira, o navegador agrupa as mudanças
Eventos no JavaScript: onClick, onChange e maisDescubra como os eventos em JavaScript, como onClick e onChange, possibilitam interações dinâmicas e melhoram a experiência do usuário em páginas web. e faz a pintura no momento mais apropriado, reduzindo o custo de renderização.
Ferramentas de Diagnóstico🔗
Para identificar gargalos de reflow, você pode usar ferramentas de desenvolvimento do navegador
Debugging e Ferramentas de Desenvolvimento do NavegadorAprenda a depurar código JavaScript com as Ferramentas do Navegador. Use console, breakpoints e debugger para solucionar bugs de forma prática., como o Chrome DevTools
Editores de Código e Ferramentas de DesenvolvimentoDescubra como escolher editores de código e utilizar DevTools para melhorar a criação e depuração de páginas HTML de forma prática e eficiente. (na aba “Performance
Debugging e Ferramentas de Desenvolvimento do NavegadorAprenda a depurar código JavaScript com as Ferramentas do Navegador. Use console, breakpoints e debugger para solucionar bugs de forma prática.” ou “Rendering”). Lá, é possível gravar uma sessão e analisar como o layout está sendo recalculado ao longo do tempo. Dessa forma, você localiza pontos críticos e verifica se estratégias de otimização estão surtindo efeito.
Tabela Resumo de Boas Práticas🔗
| Boas Práticas | Benefício |
|---|---|
| Agrupar leituras e escritas no DOM | Reduz o número de reflows |
| Alterar classes em bloco (em vez de várias props) | Evita reflows repetitivos |
| Isolar elementos animados (position absolute/fixed) | Minimiza impacto no layout principal |
Utilizar requestAnimationFrame | Agrupa alterações de animação de forma eficaz |
Usar documentFragment para manipulação em massa | Reduz inserções/remoções diretas no DOM |
Conclusão🔗
Entender a dinâmica do reflow e do repaint e como minimizá-los é essencial para quem busca desempenho
Debugging e Ferramentas de Desenvolvimento do NavegadorAprenda a depurar código JavaScript com as Ferramentas do Navegador. Use console, breakpoints e debugger para solucionar bugs de forma prática. avançado em aplicações web. Ao agrupar leituras e escritas no DOM
Introdução ao DOM e Seleção de ElementosDescubra como o DOM transforma o HTML em uma árvore de objetos. Aprenda a selecionar e manipular elementos com métodos JavaScript para páginas dinâmicas., manipular elementos
Tags e Elementos: Sintaxe e HierarquiaDescubra os fundamentos do HTML: aprenda sobre tags, elementos, hierarquia e boas práticas para criar páginas bem estruturadas e acessíveis. fora do fluxo, usar classes
Atributos HTML: `id`, `class`, `style`, `data-*`Aprenda a aplicar atributos id, class, style e data-* no HTML para organizar, estilizar e dinamizar sua página com praticidade e eficiência. em bloco e aproveitar APIs
Consumindo APIs com Fetch e AxiosDescubra como integrar APIs com Fetch e Axios em JavaScript. Aprenda a fazer requisições HTTP, tratar erros e usar métodos GET e POST com exemplos práticos. como requestAnimationFrame, garantimos menos interrupções de layout e melhoramos significativamente a experiência do usuário.
Animações e Efeitos com JavaScript PuroAprenda a criar animações e efeitos visuais usando JavaScript puro. Descubra técnicas que combinam performance e criatividade para interações web surpreendentes
Aplicar essas práticas de maneira consistente permitirá que você desenvolva páginas e apps com transições
Transições: transition-property, transition-duration, timing-functionTransforme sua interface com transições em CSS. Aprenda a aplicar transition-property, duration e timing-function para criar animações suaves e modernas. e animações mais suaves, ganhando em performance
Debugging e Ferramentas de Desenvolvimento do NavegadorAprenda a depurar código JavaScript com as Ferramentas do Navegador. Use console, breakpoints e debugger para solucionar bugs de forma prática. e oferecendo uma experiência de alta qualidade.
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Documentação oficial do MDN – Fornece boas referências sobre manipulação do DOM, reflow, repaint e técnicas de otimização de performance em aplicações web: developer.mozilla.org/pt-BR/docs/Web/JavaScript
- Documentação oficial do React – Útil para desenvolvedores que trabalham com frameworks que gerenciam o fluxo de renderização de forma otimizada, apesar do tutorial abordar conceitos genéricos de renderização e reflow: react.dev
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 11 meses atrás
há 10 meses atrás
há 10 meses atrás
há 11 meses atrás