Depuração web

Como investigar erro de reconexão em site JavaScript no Safari e no celular

Um roteiro para depurar falhas de reconexão quando um site em JavaScript volta do segundo plano em Safari, iPhone e outros navegadores móveis.

Assistir ao vídeo original no YouTube
Thumbnail do vídeo: Erro de reconexão em sites JS e IA no Cloudflare

Uma página pode funcionar por horas no computador e falhar assim que o celular bloqueia a tela ou troca de aplicativo. Navegadores móveis suspendem abas, encerram conexões e retomam processos em condições diferentes. Tratar a volta do segundo plano como parte normal do ciclo de vida da página evita erros que parecem aleatórios para quem usa o site.

Cenário comum
Aba suspensa ao trocar de aplicativo
Ponto de atenção
Conexões e estados antigos
Boa resposta
Retomada explícita e mensagem clara

Por que o segundo plano muda o comportamento da aplicação

Ao ir para o segundo plano, uma aba pode ter timers pausados, conexões interrompidas e memória reduzida. Ao voltar, código que supõe uma sessão contínua pode tentar usar um socket fechado, repetir requisições ou mostrar dados antigos. O primeiro passo é identificar a dependência afetada: conexão em tempo real, autenticação expirada, requisição em andamento ou estado visual que ficou preso.

A decisão melhora quando o problema é descrito com precisão antes de escolher uma ferramenta. Não confunda ausência momentânea de rede com erro definitivo. Também não crie várias conexões paralelas na volta da aba: isso pode duplicar mensagens, custos e atualizações. O comportamento exato varia por navegador e sistema, então a solução precisa tratar o protocolo usado e não depender de um único teste em desktop.

Uma estratégia de retomada sem repetição descontrolada

Use eventos de visibilidade e foco para verificar se a aplicação ainda está saudável. Em vez de reconectar a cada evento, mantenha um estado que saiba quando uma tentativa está em andamento e use espera crescente em falhas temporárias. A interface deve informar que está retomando e permitir nova tentativa quando necessário. Dados sensíveis devem ser solicitados novamente se a sessão não puder ser confirmada.

Divida a execução em uma parte pequena, verificável e reversível. Esse recorte mostra o comportamento real da solução, evita ajustes por tentativa e facilita explicar por que cada etapa existe.

Testes que revelam o problema antes do usuário

Teste em um iPhone ou simulador real: abra a página, inicie a ação, envie o navegador ao segundo plano e volte depois de alguns minutos. Repita com rede instável e com sessão expirada. Registre no cliente e no servidor qual evento ocorreu, sem gravar dados privados, para diferenciar uma falha de reconexão de um problema de autenticação ou de origem.

Se o resultado não puder ser conferido por uma pessoa que não participou da mudança, a implementação ainda está incompleta. Registre o que foi testado, mantenha um caminho de correção e revise os limites sempre que o projeto mudar.

Lista de verificação para colocar a ideia em prática

  1. Identifique quais conexões e requisições sobrevivem ao segundo plano.
  2. Controle para que exista apenas uma tentativa de reconexão por vez.
  3. Use espera progressiva em falhas temporárias.
  4. Atualize a interface quando a sessão precisar ser retomada.
  5. Teste em dispositivos móveis, não apenas no navegador de desktop.

Erros que costumam custar mais tempo

Abrir várias conexões quando a aba recebe foco.

Manter dados antigos como se a sessão ainda fosse válida.

Tratar qualquer ausência de rede como falha permanente.

Perguntas frequentes

Por que meu site funciona no desktop e falha no iPhone?

Navegadores móveis suspendem abas e conexões de maneira mais agressiva. A aplicação precisa lidar com retomada, rede e sessão depois do segundo plano.

O evento visibilitychange resolve tudo?

Ele ajuda a detectar mudança de estado, mas a lógica precisa verificar conexão, sessão e dados antes de retomar ações.

Devo reconectar imediatamente?

Faça uma tentativa controlada e evite múltiplas reconexões paralelas. Em falhas repetidas, use espera crescente e uma mensagem útil para a pessoa usuária.

A estabilidade do navegador também depende de uma entrega inicial bem planejada e de uma infraestrutura coerente com o projeto.