Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Diminuir quantidade de 'requisições' para o MongoDB, setTimeout? Outras formas?

Não é uma dúvida do curso em si, mas de uma 'melhoria'. Desde quando eu vi que uma hora iria salvar os dados em um banco de dados fiquei pensando de que forma isso seria colocado, se realmente seria em cada 'keyup' ou teria uma forma mais inteligente. Quando chegou no momento vi que 'nada' foi feito relacionado a isso, simplesmente em cada keyup é enviado uma query para o banco de dados.

Um pensamento que tive seria no evento de keyup no front fosse utilizado um setTimeout e clear, de pouco tempo mesmo, 0,5 segundos, 1 segundo... isso evitaria que numa digitação muito rápida fosse enviada várias requisições pro BD. (não testei, é só uma ideia)

Certo, mas voltando, como isso me deixou muito pensativo queria ver se alguém tem ideia de qual seria, pelo menos numa forma 'simples' de melhorar isso. É mais uma dúvida de como esse tipo de problema poderia ser resolvido. Só pra pensar um pouquinho :).

1 resposta
solução!

Oi, Rafael, tudo bem?

Excelente pensamento crítico! De fato, a forma que o evento está sendo emitido pelo front-end é bastante custosa para o back-end. Dito isso, torna-se responsabilidade do front-end otimizar a quantidade de envio de requisições (ou no caso do websockets, a quantidade de emissão de eventos).

Isso pode ser feito utilizando uma técnica chamada debounce, cujo intuito é exatamente o que você propôs: impedir que um mesmo evento seja disparado várias vezes em um curto intervalo de tempo. E isso realmente seria apropriado para o caso onde estamos solicitando uma mudança no banco de dados a cada dígito do usuário.

Eu achei um artigo bem bacana falando mais sobre como você pode implementar o debounce, casos de uso, etc: https://www.freecodecamp.org/news/javascript-debounce-example/. Como você disse, realmente é utilizado setTimeout e clearTimeOut! É possível aplicar com JS puro ou utilizar bibliotecas externas.

Espero ter ajudado! Depois me diz se conseguiu aplicar no seu projeto. Abraços e bons estudos :)