Entendendo Interações por Toque e Impacto na Performance
Entendendo Interações por Toque e Impacto na Performance
Quando você toca na tela do seu celular, muita coisa acontece nos bastidores. Vamos entender como essas interações funcionam e por que elas afetam a velocidade e a responsividade do seu aplicativo.
O que é um Evento de Toque?
Imagine que sua tela é como um vigilante muito atento. Toda vez que você toca nela, o vigilante precisa:
- Detectar que algo tocou a tela
- Identificar onde foi o toque
- Avisar o aplicativo sobre isso
- Esperar o aplicativo responder
Esse processo é chamado de evento de toque. Em aplicativos móveis, existem três tipos principais de eventos:
- touchstart: quando seu dedo toca a tela
- touchmove: quando você arrasta o dedo
- touchend: quando você levanta o dedo
O Problema do Atraso de Toque (Tap Delay)
Nos primórdios dos navegadores móveis, havia um atraso de 300 milissegundos entre você tocar a tela e o aplicativo responder. Por quê? Os navegadores esperavam para ver se você ia fazer um "duplo toque" (double tap) para ampliar a página.
Pense nisso como um garçom que espera 300ms antes de levar seu pedido, só para ter certeza de que você não vai chamar novamente. Isso é frustrante!
Felizmente, os navegadores modernos eliminaram esse atraso, mas você ainda precisa otimizar seu código para evitar criar novos atrasos.
Reconhecimento de Gestos
Gestos são padrões de toque mais complexos. Alguns exemplos:
- Tap: um toque rápido
- Swipe: arrastar o dedo rapidamente
- Pinch: aproximar dois dedos para ampliar
- Long press: manter o dedo pressionado
Reconhecer esses gestos requer que seu aplicativo processe múltiplos eventos de toque e calcule a velocidade, direção e distância. Isso consome poder de processamento!
Como os Eventos de Toque Afetam a Performance
Cada evento de toque dispara código que você escreveu. Se esse código for lento, o aplicativo fica travado. Veja este exemplo:
// ❌ RUIM: Processamento pesado no evento de toque
document.addEventListener('touchmove', function(event) {
// Recalcular toda a página a cada movimento
for (let i = 0; i < 10000; i++) {
complexCalculation();
}
updateUI();
});
O problema: touchmove dispara dezenas de vezes por segundo! Se cada disparo faz 10.000 cálculos, você está fazendo centenas de milhares de operações por segundo. Seu aplicativo vai ficar muito lento.
A Solução: Throttling e Debouncing
Throttling significa "limitar a frequência". Em vez de processar cada evento, você processa apenas alguns deles:
// ✅ BOM: Limitar quantas vezes processamos
let lastProcessTime = 0;
const THROTTLE_DELAY = 16; // ~60fps
document.addEventListener('touchmove', function(event) {
const now = Date.now();
if (now - lastProcessTime > THROTTLE_DELAY) {
complexCalculation();
updateUI();
lastProcessTime = now;
}
});
Agora, em vez de processar 60 vezes por segundo, você processa apenas uma vez a cada 16 milissegundos (aproximadamente 60 vezes por segundo, mas de forma controlada).
Passive Event Listeners
Há outro truque importante. Quando você adiciona um event listener, o navegador assume que você pode chamar preventDefault() para bloquear o comportamento padrão. Isso força o navegador a esperar seu código terminar antes de fazer scroll ou zoom.
Se você NÃO vai chamar preventDefault(), diga ao navegador:
// ✅ BOM: Dizer ao navegador que não vamos bloquear
document.addEventListener('touchmove', handleTouchMove, { passive: true });
Isso permite que o navegador faça scroll enquanto seu código roda em paralelo, tornando tudo mais responsivo.
Resumo das Melhores Práticas
- Use throttling para eventos que disparam frequentemente
- Adicione
{ passive: true }quando não precisar bloquear comportamentos padrão - Evite cálculos pesados dentro de event listeners
- Teste em dispositivos reais, não apenas no computador
Key Takeaways
- Eventos de toque (touchstart, touchmove, touchend) disparam frequentemente e podem sobrecarregar o aplicativo se o código for lento
- Throttling limita quantas vezes você processa eventos, melhorando drasticamente a responsividade sem perder funcionalidade
- Event listeners passivos permitem que o navegador execute comportamentos padrão (scroll, zoom) em paralelo com seu código, tornando a experiência mais fluida
Enjoyed this reading?
SharpStack delivers personalized tech readings every day, calibrated to your skill level. 5 minutes a day to stay sharp.
“Stay sharp. At your pace. Everyday.”