const delay = (ms) => new Promise((a) => setTimeout(() => a(ms), ms)); async function speedtest(getPromise, count, parallel = 1) { let startTime = performance.now(); let startQuery; let endQuery; let queryDurationAll = 0; for (let i = 0; i < count; i++) { let waiting = []; for (let k = 0; k < parallel; k++) { waiting.push(getPromise()); } startQuery = performance.now(); await Promise.all(waiting); endQuery = performance.now(); queryDurationAll += endQuery - startQuery; } let finishTime = performance.now(); return { //общую длительность работы цикла duration: finishTime - startTime, //реальное средняя скорость запроса querySpeed: (count * parallel) / ((finishTime - startTime) * parallel), //реальное среднее время запроса (отталкиваясь от count и времени работы цикла). parallelDuration: queryDurationAll / (count * parallel), //скорость в запросах в миллисекунду parallelSpeed: (count * parallel) / (finishTime - startTime), //среднее время обработки запроса параллельно (за какое время исполнилось parallel*count промисов) queryDuration: ((endQuery - startQuery) / count) * parallel, }; } speedtest(() => delay(1000), 10, 10).then((result) => console.log(result)); speedtest( () => fetch("http://swapi.dev/api/people/1") .then((res) => res.json()) .then((data) => console.log(data)), 10, 5 ).then((result) => console.log("swapi.dev: ", result));