Por Que Jogos de Navegador Parecem Travados (e Como Resolver)

O clique do seu mouse chega a um jogo nativo em poucos milissegundos. Num jogo de navegador, esse mesmo clique faz fila atrás do sistema operacional, de um motor JavaScript e de um compositor antes de virar um pixel. Veja onde os navegadores adicionam atraso, como medir a sua parcela dele e as correções que realmente mudam o número.

Diagrama de cronômetro mostrando os estágios do atraso de input entre um clique e a resposta de um jogo de navegador
Entre o seu clique e o pixel, um clique no navegador passa por mais mãos do que você imagina.

A cadeia de input, do botão ao pixel

Todo clique que você faz percorre uma linha de montagem. Cada estágio adiciona seu próprio atraso, e o navegador está no meio dela:

EstágioCusto típicoObservações
Botão do mouse + debounce1-4msBotões ópticos são os mais rápidos; veja nosso guia de debounce do mouse
Polling USB / sem fio1-8ms1ms a 1000Hz de polling; até 8ms a 125Hz
Despacho de eventos do SO~1msGeralmente barato, a menos que o sistema esteja sobrecarregado
Despacho de eventos do navegador1-10ms+Hit-testing, thread principal do JS, extensões
Espera do requestAnimationFrame0-16,7msAté um quadro inteiro a 60Hz
Compositor + renderização2-8msOnde a aceleração de hardware importa
Scan-out + resposta da tela2-17msAtualização do painel e tempo de resposta do pixel

Some tudo e um jogo de navegador num setup de 60Hz pode ficar com 40-60ms de atraso do clique ao fóton antes de a lógica do jogo fazer qualquer coisa. Um jogo nativo com raw input pula vários desses estágios por completo. Essa diferença é exatamente por que o mesmo mouse pode parecer preciso na área de trabalho e mole numa aba do navegador.

O imposto da tela: 16,7ms antes de você ver qualquer coisa

Aqui está o fato que vale contar nas LAN houses: a 60Hz, a tela sozinha pode adicionar até 16,7ms de atraso — um quadro inteiro — antes de seu clique virar algo visível. Esse único estágio custa mais do que o pipeline inteiro de um mouse gamer: um bom botão óptico dispara em cerca de 1ms e um polling de 1000Hz adiciona mais 1ms.

As pessoas gastam alegremente R$ 800 para economizar 2ms num mouse enquanto deixam 16,7ms na mesa nas configurações do monitor. Suba para 144Hz e o imposto do quadro cai para 6,9ms; a 240Hz, são 4,2ms. Se seu monitor é capaz, mas está mal configurado — uma situação deprimentemente comum — nosso guia para verificar sua taxa de atualização real leva dois minutos.

Nada disso significa que o mouse não importa. Significa que latência é um orçamento gasto na cadeia inteira, e as maiores linhas desse orçamento raramente são as que têm o melhor marketing.

Medindo a parcela do navegador no atraso

Você não conserta o que não consegue isolar. Nosso teste de latência de input do navegador mede o segmento que pertence ao navegador: compara o timestamp de cada evento de input com o relógio de alta resolução no momento em que o handler realmente roda, e então reporta uma mediana e um percentil 95 sobre um lote de cliques, toques ou teclas.

Leia os resultados assim: a mediana é seu atraso típico de despacho — num navegador de desktop saudável, geralmente em poucos milissegundos de um dígito só. O p95 é a cauda — o quão ruim fica quando a thread principal engasga. Uma mediana de 2ms com p95 de 30ms significa que seu navegador está bem em média, mas trava com regularidade, o que num jogo parece input comido aleatoriamente.

Seja honesto sobre o que isso mede: atraso de despacho na fronteira de eventos do navegador. Não inclui o botão do seu mouse, o transporte USB nem o scan-out da tela — a própria seção de guia da ferramenta deixa isso claro. Para a visão completa de ponta a ponta, percorra a checklist de input lag quando terminar aqui.

Por que o mesmo mouse parece pior num navegador

Jogos nativos leem input perto do metal — APIs de raw input que recebem dados do mouse com cerimônia mínima. Navegadores fazem o caminho panorâmico. O SO entrega o evento ao navegador, o navegador decide qual elemento está sob o cursor (fazendo hit-testing no DOM inteiro), despacha ao JavaScript na thread principal, e só então o código do seu jogo pode reagir. Se a thread principal está ocupada executando um script de anúncio, seu clique espera na fila.

Três amplificadores específicos de navegador:

É também por isso que o teclado pode parecer esponjoso no navegador enquanto o mesmo teclado é instantâneo num app nativo — um padrão que exploramos em meu teclado está com lag? e na análise mais profunda de latência de teclado.

Correções que realmente funcionam

Em ordem aproximada de impacto:

Aplique uma de cada vez e refaça o teste de latência após cada mudança. Ver seu próprio p95 cair de 25ms para 6ms é mais convincente que qualquer guia de configurações.

Vsync e ritmo de quadros, num parágrafo

A renderização do navegador é sincronizada ao vsync: os quadros são apresentados em sincronia com a atualização da sua tela. Isso é bom — evita tearing — mas significa que seu jogo só pode atualizar nas fronteiras de quadro, e qualquer quadro que perca seu prazo espera um quadro inteiro extra. A 60Hz, um prazo perdido custa 16,7ms; a 240Hz, a mesma perda custa 4,2ms. Ritmo de quadros irregular é por que um jogo de navegador pode reportar '60 FPS' e ainda assim parecer engasgado: os quadros estão todos lá, só chegam em horários irregulares. Alta taxa de atualização é a cura mais barata, porque encolhe o tamanho de cada erro possível.

Quando não é o navegador

Se você fez tudo acima e os jogos ainda parecem estranhos, o gargalo está em outro ponto da cadeia. Os suspeitos não-navegador de sempre: uma TV em vez de monitor (o modo game desligado pode adicionar 30-80ms), teclado ou mouse Bluetooth, um monitor ainda a 60Hz, carga pesada do sistema por outro app, ou — em jogos online — simples latência de rede, que é um problema diferente vestindo a mesma fantasia. Um ping de 20ms não é input lag, mas suas mãos não conseguem diferenciar; nosso artigo sobre tempo de reação médio explica por que 20ms está bem no limite da percepção humana.

Percorra o sistema inteiro metodicamente com a checklist de input lag: meça cada estágio, mude uma coisa, meça de novo. Caçar latência só é frustrante quando você chuta.

Resumindo

Jogos de navegador parecem travados porque um clique no navegador viaja mais longe que num jogo nativo — pelo hit-testing, pela thread principal do JavaScript, por um compositor sincronizado ao vsync e finalmente pela tela. As maiores vitórias são chatas e grátis: aceleração de hardware ligada, taxa de atualização configurada corretamente, abas e extensões mortas, tela cheia ligada, Bluetooth desligado. Meça o atraso de despacho do seu navegador, conserte os estágios que você controla, e só então culpe o jogo. A maioria dos 'jogos de navegador travados' é, na verdade, setups de navegador travados.

Pronto para testar seu próprio equipamento?

Teste de Latência de Input do Navegador

Perguntas frequentes

Por que jogos de navegador parecem mais travados que jogos de verdade?

Jogos nativos leem input por APIs de baixo nível com processamento mínimo. Navegadores roteiam cada input pelo despacho do SO, hit-testing do DOM e thread principal do JavaScript antes de o código do jogo ver, e ainda apresentam quadros sincronizados ao vsync da tela. Uma aba ocupada ou um monitor de 60Hz adicionam facilmente 20-40ms que um jogo nativo nunca paga.

Como reduzir input lag em jogos de navegador?

As cinco correções de maior impacto: ative a aceleração de hardware, configure o monitor na taxa de atualização real, feche abas e extensões em segundo plano, jogue em tela cheia e use periféricos com fio ou 2,4GHz em vez de Bluetooth. Meça a mudança com o teste de latência de input do navegador após cada passo.

Bluetooth adiciona input lag?

Sim — tipicamente 10-20ms por cima de todo o resto, mais travadas ocasionais quando pacotes são retransmitidos. Bluetooth serve para digitar e trabalho de escritório, mas para jogos um dongle wireless de 2,4GHz ou conexão com fio é mensuravelmente mais firme.

Input lag no navegador é a mesma coisa que ping?

Não. Input lag é o atraso entre sua ação física e o jogo reagir localmente; ping é a viagem de ida e volta na rede até um servidor. Na mão, os dois parecem idênticos — você clica e algo acontece com atraso — e é por isso que se confundem. O teste de latência mede o atraso local de despacho; ping precisa de um teste de rede.

Um monitor de 144Hz reduz input lag no navegador?

Sim, de dois jeitos. A espera de quadro do vsync cai de até 16,7ms a 60Hz para 6,9ms a 144Hz, e qualquer prazo de quadro perdido custa 10ms a menos. Tudo a montante — mouse, SO, despacho do navegador — continua igual, mas o imposto do lado da tela encolhe na hora.

Menu