js.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const delay = (ms) => new Promise((a) => setTimeout(() => a(ms), ms));
  2. async function speedtest(getPromise, count, parallel = 1) {
  3. let startTime = performance.now();
  4. let startQuery;
  5. let endQuery;
  6. let queryDurationAll = 0;
  7. for (let i = 0; i < count; i++) {
  8. let waiting = [];
  9. for (let k = 0; k < parallel; k++) {
  10. waiting.push(getPromise());
  11. }
  12. startQuery = performance.now();
  13. await Promise.all(waiting);
  14. endQuery = performance.now();
  15. queryDurationAll += endQuery - startQuery;
  16. }
  17. let finishTime = performance.now();
  18. return {
  19. //общую длительность работы цикла
  20. duration: finishTime - startTime,
  21. //реальное средняя скорость запроса
  22. querySpeed: (count * parallel) / ((finishTime - startTime) * parallel),
  23. //реальное среднее время запроса (отталкиваясь от count и времени работы цикла).
  24. parallelDuration: queryDurationAll / (count * parallel),
  25. //скорость в запросах в миллисекунду
  26. parallelSpeed: (count * parallel) / (finishTime - startTime),
  27. //среднее время обработки запроса параллельно (за какое время исполнилось parallel*count промисов)
  28. queryDuration: ((endQuery - startQuery) / count) * parallel,
  29. };
  30. }
  31. speedtest(() => delay(1000), 10, 10).then((result) => console.log(result));
  32. speedtest(
  33. () =>
  34. fetch("http://swapi.dev/api/people/1")
  35. .then((res) => res.json())
  36. .then((data) => console.log(data)),
  37. 10,
  38. 5
  39. ).then((result) => console.log("swapi.dev: ", result));