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.

Leitura 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:

  1. Ação: O usuário clica em um botão, por exemplo, de 'Adicionar ao Carrinho'.
  2. 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.
  3. Frustração (Rage Click): Sem feedback visual, o usuário presume que o clique falhou e clica novamente várias vezes.
  4. 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 onClick atrasam 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:

  1. Implemente ferramentas de RUM (Real User Monitoring).
  2. Configure dashboards cruzando sessões com altos índices de rage clicks nos principais funis (ex: /checkout) e os respectivos valores de INP.
  3. 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.

Foi útil?Deixe seu feedback para nos ajudar a melhorar.