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));
