hw_18_03_speedtest.html 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <header>speedtest</header>
  2. <body>
  3. <script>
  4. const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
  5. let duration = 0;
  6. async function speedtestOne(getPromise) {
  7. let startTime = new Date();
  8. await getPromise();
  9. let endTime = new Date();
  10. return endTime - startTime;
  11. }
  12. async function speedtest(getPromise, count, parallel = 1) {
  13. const arr = [];
  14. let startTime = new Date();
  15. let execCount = 0;
  16. let queryDuration = 0;
  17. while (execCount < count) {
  18. for (i = 0; i < parallel; i++) {
  19. execCount++;
  20. if (execCount > count)
  21. break;
  22. arr.push(new Promise(
  23. async resolveFunc => {
  24. let res = await speedtestOne(getPromise);
  25. resolveFunc(res);
  26. }));
  27. }
  28. let results = await Promise.all(arr);
  29. queryDuration = results.reduce((va, v) => va + v);
  30. }
  31. let endTimeParallel = new Date();
  32. querySpeed = queryDuration / count;
  33. parallelDuration = endTimeParallel - startTime;
  34. parallelSpeed = parallelDuration / count;
  35. duration += parallelDuration;
  36. return {
  37. duration,
  38. querySpeed, //средняя скорость одного запроса
  39. queryDuration, //
  40. parallelSpeed,
  41. parallelDuration
  42. }
  43. }
  44. speedtest(() => delay(1000), 10, 10)
  45. .then(result => console.log(result))
  46. // {duration: 10000,
  47. // querySpeed: 0.001, //1 тысячная запроса за миллисекунду
  48. // queryDuration: 1000, //1000 миллисекунд на один реальный запрос в среднем
  49. // parallelSpeed: 0.01 // 100 запросов за 10000 миллисекунд
  50. // parallelDuration: 100 // 100 запросов за 10000 миллисекунд
  51. speedtest(() => fetch('http://swapi.dev/api/people/1').then(res => res.json()), 10, 5)
  52. .then(result => console.log(result))
  53. </script>
  54. </body>