index.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
  2. async function changeColor(color, duration, div) {
  3. div.style.background = color;
  4. await delay(duration);
  5. div.style.background = 'gray';
  6. }
  7. async function trafficLight(){
  8. while (true){
  9. await changeColor('green', 2000, green)
  10. await changeColor('yellow', 1000, yellow)
  11. await changeColor('red', 3000, red)
  12. }
  13. }
  14. trafficLight()
  15. function domEventPromise(element, eventName) {
  16. return new Promise(function(resolve, reject) {
  17. let listener = function (event) {
  18. element.removeEventListener(eventName, listener)
  19. resolve(event)
  20. if(event) {
  21. element.setAttribute("disabled", "disabled");
  22. delay(5000).then(result => element.removeAttribute("disabled", "disabled"))
  23. }
  24. }
  25. element.addEventListener(eventName, listener)
  26. })
  27. }
  28. async function changeColorPedestrian(color, duration, div) {
  29. div.style.background = color;
  30. await delay(duration);
  31. }
  32. async function pedestrianTrafficLight(){
  33. while (true){
  34. Promise.race([
  35. domEventPromise(btn, 'click').then( result => {
  36. changeColorPedestrian('green', 2000, light)
  37. }),
  38. await changeColorPedestrian('green', 2000, light),
  39. await changeColorPedestrian('red', 3000, light)
  40. ])
  41. }
  42. }
  43. pedestrianTrafficLight()
  44. ///////////////////////////////////////////////
  45. //speedtest
  46. async function speedtest(getPromise, count, parallel = 1) {
  47. let firstTime = performance.now();
  48. for (let i = count; i > 0; i--) {
  49. let promiseArr = [];
  50. for (let j = parallel; j > 0; j--) {
  51. promiseArr.push(getPromise())
  52. }
  53. console.log(promiseArr);
  54. await Promise.all(promiseArr);
  55. }
  56. let duration = performance.now() - firstTime;
  57. let parallelDuration = duration / (parallel*count);
  58. let parallelSpeed = (parallel*count) / duration;
  59. let queryDuration = duration / count;
  60. let querySpeed = 1 / queryDuration;
  61. return {
  62. duration,
  63. querySpeed, //средняя скорость одного запроса
  64. queryDuration,
  65. parallelSpeed,
  66. parallelDuration
  67. }
  68. }
  69. speedtest(() => delay(1000), 10, 10).then((result) => console.log(result));
  70. speedtest(() => fetch('http://swapi.dev/api/people/1').then(res => res.json()), 10, 5).then(result => console.log(result))