A seguir, mostro um exemplo de como implementar concorrência de forma eficiente.
Como posso evitar lentidão ao processar milhares de requisições em uma API Node.js?
Claro. A lentidão e o alto consumo de memória geralmente ocorrem quando as requisições não são gerenciadas em lotes ou quando não há um controle de concorrência adequado no Node.js.
A melhor abordagem é utilizar a biblioteca p-limit ou construir um pool de promessas customizado. Abaixo, mostro um exemplo utilizando Promise.all com fatiamento em chunks para controlar a carga:
javascript
1const axios = require('axios');23async function processarEmLotes(itens, tamanhoLote) {4 const resultados = [];56 for (let i = 0; i < itens.length; i += tamanhoLote) {7 const lote = itens.slice(i, i + tamanhoLote);89 Executa as requisições do lote concorrentes10 const promessasLote = lote.map(item =>11 axios.get(`https://api.exemplo.com/dados/${item.id}`)12 );1314 const respostasLote = await Promise.all(promessasLote);15 resultados.push(...respostasLote.map(res => res.data));16 }1718 return resultados;19}
Esse padrão limita a memória utilizada ao processar os chunks sequencialmente, mas paraleliza as requisições dentro de cada lote — um equilíbrio ideal entre velocidade e consumo de recursos.