Interaction to Next Paint (INP): A métrica preditiva número 1 de Rage Clicks
Descubra como o INP se correlaciona diretamente com rage clicks e aprenda técnicas de Growth Engineering em React/Next.js para otimizar o tempo de resposta.
PerformanceLeitura executiva
Principais conclusões
- Rage clicks aumentam substancialmente quando o INP ultrapassa 200ms.
- No React, hidratação pesada e renderizações síncronas bloqueiam a thread principal, degradando o INP.
- Corrigir o INP reduz rage clicks e protege a conversão de quedas por frustração.
A qualidade da experiência em um site não se resume a quão rápido ele carrega, mas sim a quão rápido ele responde quando o usuário tenta agir. Se a sua interface em React ou Next.js demora para reagir a um clique, o usuário vai clicar de novo. E de novo. Essa sequência de frustração é chamada de rage click, e a métrica que melhor a prevê é o Interaction to Next Paint (INP).
O INP, parte do Core Web Vitals, avalia a capacidade de resposta geral de uma página aos cliques do usuário, toques e interações de teclado. Quando um aplicativo falha em fornecer feedback visual em até 200ms, a probabilidade de rage clicks dispara.
O ciclo vicioso do INP e Rage Clicks
Evidências apontam que páginas com INP "Bom" (≤200ms) apresentam uma taxa drasticamente menor de rage clicks do que aquelas classificadas como "Precisa Melhorar" ou "Ruim" (>200ms).
Há uma mecânica clara por trás disso:
- Ação: O usuário clica em um botão, por exemplo, de 'Adicionar ao Carrinho'.
- Latência (INP Alto): A thread principal do navegador está ocupada com tarefas longas de JavaScript (como uma re-renderização pesada no React). O navegador não consegue atualizar a interface imediatamente para mostrar um spinner ou mudança de estado.
- Frustração (Rage Click): Sem feedback visual, o usuário presume que o clique falhou e clica novamente várias vezes.
- Agravamento: Cada novo clique adiciona novos eventos à fila, sobrecarregando ainda mais a thread principal e prolongando o INP.
Esse comportamento não afeta apenas a performance técnica; ele é um indicador direto de abandono de sessão e perda de receita em fluxos críticos de conversão.
Causas comuns em aplicações React e Next.js
No ecossistema moderno de frameworks JavaScript, algumas arquiteturas e padrões causam estrangulamento da thread principal:
- Hidratação cara (Expensive Hydration): No Next.js, o processo de "acordar" o HTML estático no lado do cliente executando grandes volumes de JavaScript bloqueia a thread principal. Durante esse período de hidratação, cliques são enfileirados, resultando em INP alto logo no início da sessão.
- Árvores de componentes muito grandes: Quando o estado muda e o React precisa reconciliar uma parte extensa do DOM virtual de forma síncrona, a thread principal trava.
- Event handlers pesados: Lógicas de processamento de dados, formatação ou requisições mal gerenciadas atreladas a eventos
onClickatrasam a capacidade do navegador de pintar o próximo frame.
Recomendações de Growth Engineering para otimização
A abordagem tática para resolver rage clicks causados por INP ruim não é adivinhar, mas focar nos componentes de maior impacto.
1. Quebre tarefas longas (Yielding to Main Thread)
Para tarefas que não podem ser evitadas, divida-as. Funções JavaScript que demoram mais de 50ms são classificadas como Long Tasks. No React, usar transições de estado (startTransition ou a hook useTransition) ajuda a priorizar atualizações urgentes de UI (como o feedback visual do clique) e deixar as re-renderizações mais pesadas para segundo plano.
2. Otimize a Hidratação
No Next.js, adote estratégias de hidratação progressiva ou parcial (Partial Prerendering). Sempre que possível, utilize componentes de servidor (Server Components) para deslocar a complexidade do cliente (browser) para o servidor. Reduzir o tamanho do bundle JavaScript transferido e executado é a forma mais eficaz de diminuir o risco de contenção na thread principal.
3. Feedback visual imediato
Garanta que a interface reaja em até 100ms. Se a operação subjacente for demorada, aplique o padrão de UI otimista (Optimistic UI). Mude o botão para um estado de carregamento ou mostre uma notificação instantaneamente antes que a promessa seja resolvida. Isso mitiga a percepção de falha do usuário, cortando o rage click pela raiz.
Como verificar se a ação funcionou
Não dependa exclusivamente de dados de laboratório (Lighthouse) para avaliar INP. O INP é fortemente dependente das capacidades do dispositivo do usuário e de como ele interage com a página.
Ação verificável:
- Implemente ferramentas de RUM (Real User Monitoring).
- Configure dashboards cruzando sessões com altos índices de rage clicks nos principais funis (ex:
/checkout) e os respectivos valores de INP. - Após aplicar as correções, observe se o INP no percentil 75 caiu para abaixo de 200ms e confirme a queda proporcional na métrica de rage clicks em até 14 dias de campo.
Respostas diretas
Perguntas frequentes
Qual a diferença entre INP e FID?
O First Input Delay (FID) mede apenas o atraso da primeira interação. O Interaction to Next Paint (INP) observa a latência de todas as interações durante todo o ciclo de vida da página, focando na mais longa.
Como descubro quais componentes causam INP ruim no React?
Utilize o Profiler do React DevTools para identificar renderizações demoradas e ferramentas de RUM (Real User Monitoring) para cruzar dados de rage clicks com componentes específicos em produção.