12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- <header>speedtest</header>
- <body>
- <script>
- const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
- let duration = 0;
- async function speedtestOne(getPromise) {
- let startTime = new Date();
- await getPromise();
- let endTime = new Date();
- return endTime - startTime;
- }
- async function speedtest(getPromise, count, parallel = 1) {
- const arr = [];
- let startTime = new Date();
- let execCount = 0;
- let queryDuration = 0;
- while (execCount < count) {
- for (i = 0; i < parallel; i++) {
- execCount++;
- if (execCount > count)
- break;
- arr.push(new Promise(
- async resolveFunc => {
- let res = await speedtestOne(getPromise);
- resolveFunc(res);
- }));
- }
- let results = await Promise.all(arr);
- queryDuration = results.reduce((va, v) => va + v);
- }
- let endTimeParallel = new Date();
- querySpeed = queryDuration / count;
- parallelDuration = endTimeParallel - startTime;
- parallelSpeed = parallelDuration / count;
- duration += parallelDuration;
- return {
- duration,
- querySpeed, //средняя скорость одного запроса
- queryDuration, //
- parallelSpeed,
- parallelDuration
- }
- }
- speedtest(() => delay(1000), 10, 10)
- .then(result => console.log(result))
- // {duration: 10000,
- // querySpeed: 0.001, //1 тысячная запроса за миллисекунду
- // queryDuration: 1000, //1000 миллисекунд на один реальный запрос в среднем
- // parallelSpeed: 0.01 // 100 запросов за 10000 миллисекунд
- // parallelDuration: 100 // 100 запросов за 10000 миллисекунд
- speedtest(() => fetch('http://swapi.dev/api/people/1').then(res => res.json()), 10, 5)
- .then(result => console.log(result))
- </script>
- </body>
|