Entendendo como fazer polling com JavaScript

Descubra como usar polling em JavaScript para realizar verificações periódicas e atualizar o estado de uma operação assíncrona.

Como fazer polling com JavaScript?

O polling é uma técnica de verificação periódica, frequentemente utilizada para monitorar o estado de uma operação assíncrona ou verificar o status de recursos que podem demorar para ficar disponíveis. Em vez de esperar passivamente pela resposta de uma operação ou evento, o polling realiza uma verificação contínua para obter a resposta. Essa técnica é útil em várias situações, como verificar atualizações de dados, estado de processos ou a disponibilidade de recursos.

O que é polling?

Polling é uma técnica de programação onde uma aplicação verifica repetidamente o status de uma operação ou recurso em intervalos de tempo fixos. Por exemplo, um cliente pode verificar a cada 5 segundos se há novos dados disponíveis em um servidor, ou se uma operação foi concluída.

O polling é útil quando você precisa garantir que o estado de algo seja atualizado regularmente, como em casos de chats em tempo real, notificações de novos emails ou sistemas de monitoramento de status de servidores.

Implementando polling com setInterval()

A maneira mais simples de implementar polling em JavaScript é utilizando a função setInterval(), que executa uma função a cada intervalo de tempo especificado. Você pode usá-la para realizar verificações periódicas e atualizar o estado da sua aplicação.

Exemplo básico de polling com setInterval():

function verificarStatus() {
  fetch('https://api.exemplo.com/status')
    .then(response => response.json())
    .then(data => {
      console.log('Status do servidor:', data.status);
    })
    .catch(error => console.log('Erro:', error));
}

setInterval(verificarStatus, 5000);  // Verifica o status a cada 5 segundos

Neste exemplo, a função verificarStatus() faz uma requisição para um servidor e imprime o status retornado. O setInterval() chama essa função a cada 5 segundos, verificando o status do servidor periodicamente.

Cancelando o polling com clearInterval()

Embora o polling seja útil, pode ser necessário cancelá-lo em algum momento, especialmente se a operação que você está monitorando foi concluída ou se o cliente não precisar mais realizar verificações. Você pode cancelar o polling utilizando a função clearInterval(), passando o identificador do intervalo retornado por setInterval().

Exemplo de cancelamento de polling:

let intervalo = setInterval(verificarStatus, 5000);

// Para o polling após 30 segundos
setTimeout(() => {
  clearInterval(intervalo);
  console.log('Polling cancelado');
}, 30000);

Aqui, o clearInterval() é usado para interromper o polling após 30 segundos, parando as verificações periódicas.

Polling eficiente e alternativas

Embora o polling seja uma solução simples, ele pode ser ineficiente em alguns cenários. Isso acontece porque ele envolve verificações periódicas que podem consumir recursos desnecessariamente, especialmente quando o recurso monitorado não muda com frequência. Uma alternativa mais eficiente para o polling é o long polling ou o uso de WebSockets.

  • Long Polling: No long polling, o cliente faz uma requisição e espera até que o servidor tenha novos dados disponíveis antes de retornar a resposta. Isso evita que o cliente precise fazer verificações periódicas. No entanto, é mais complexo de implementar e pode exigir mais recursos no servidor.

  • WebSockets: Uma solução ainda mais eficiente para comunicação em tempo real. WebSockets permitem uma conexão bidirecional contínua entre cliente e servidor, eliminando a necessidade de fazer verificações periódicas. Quando o servidor tem novos dados, ele envia as informações diretamente ao cliente.

Exemplo de long polling:

function fazerLongPolling() {
  fetch('https://api.exemplo.com/novos-dados')
    .then(response => response.json())
    .then(data => {
      console.log('Novos dados recebidos:', data);
      fazerLongPolling();  // Chama novamente para continuar o polling
    })
    .catch(error => console.log('Erro no long polling:', error));
}

fazerLongPolling();

Neste exemplo, a função fazerLongPolling() faz uma requisição para o servidor e aguarda a resposta. Quando os dados são recebidos, a função é chamada novamente, criando um loop de requisições. Esse processo continua até o cliente ou servidor decidirem interromper o processo.

Quando usar polling?

O polling pode ser útil em várias situações, como:

  • Sistemas de monitoramento: Para verificar periodicamente o status de servidores, serviços ou processos.
  • Notificações em tempo real: Quando você precisa verificar se há novas atualizações ou mensagens em uma aplicação.
  • Interfaces dinâmicas: Como dashboards ou painéis de controle, que exibem dados que mudam com frequência.

Conclusão

Embora o polling seja uma técnica simples e útil, ele pode ser ineficiente para certos tipos de aplicação, principalmente quando há muitas requisições desnecessárias ou quando a latência é importante. Alternativas como long polling ou WebSockets podem ser mais eficientes, mas o polling ainda é uma solução viável em muitas situações. Ao implementar o polling, lembre-se de usar intervalos adequados e de cancelar o processo quando ele não for mais necessário, para evitar o desperdício de recursos.

O polling é uma técnica comum em aplicações onde é necessário monitorar o estado de algo, como o status de uma operação ou a chegada de novos dados. Embora simples, pode ser ineficiente, especialmente quando você precisa verificar periodicamente algo que não muda com frequência. Quando possível, explore alternativas como WebSockets ou long polling para uma comunicação mais eficiente.

Algumas aplicações:

  • Verificação periódica de status de sistemas e processos em tempo real.
  • Monitoramento de servidores e serviços em uma rede.
  • Notificações de novos dados ou atualizações em aplicativos web.
  • Interfaces dinâmicas e dashboards que exibem dados constantemente atualizados.

Dicas para quem está começando

  • Se você está começando, experimente usar setInterval() para entender como funciona o polling. Crie uma simples verificação de dados que ocorra a cada 5 segundos.
  • Se você perceber que seu polling está causando um alto consumo de recursos, considere alternativas como long polling ou WebSockets.
  • Teste o cancelamento do polling usando clearInterval() para evitar que ele continue indefinidamente.
  • Ao realizar polling, sempre tenha em mente o impacto no desempenho e busque um equilíbrio entre a frequência das requisições e a necessidade de atualização dos dados.

Contribuições de Cláudia Medeiros

Compartilhe este tutorial: Como fazer polling com JavaScript?

Compartilhe este tutorial

Continue aprendendo:

O que é Promise.all e como usá-lo?

Descubra o que é `Promise.all` e como utilizá-la para executar múltiplas Promises em paralelo em JavaScript, otimizando seu código assíncrono.

Tutorial anterior

O que é closure e por que é útil?

Explore o conceito de closure em JavaScript e entenda como ele pode ser usado para criar funções seguras e reutilizáveis, mantendo o escopo controlado.

Próximo tutorial