script.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. const red = document.getElementById("red");
  2. const yellow = document.getElementById("yellow");
  3. const green = document.getElementById("green");
  4. const knopka = document.getElementById("test");
  5. const btnGo = document.getElementById("go")
  6. const wrapper = document.getElementById("wrapper");
  7. const wrapper2 = document.getElementById("wrapper2")
  8. // Stage1 Светофор
  9. // const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
  10. // async function trafficLight(){
  11. // while (true){
  12. // red.classList.remove("red")
  13. // green.classList.add("green"); // включаем зеленый
  14. // await delay(5000)
  15. // yellow.classList.add("yellow") // включаем желтый
  16. // green.classList.remove("green")
  17. // await delay(2000)
  18. // red.classList.add("red") // включаем красный
  19. // yellow.classList.remove("yellow")
  20. // await delay(5000)
  21. // }
  22. // }
  23. // trafficLight()
  24. // stage 2
  25. const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
  26. async function trafficLight2(elem, redTime=3000, yellowTime=1000, greenTime=3000){
  27. for(let i=0; i<3; i++){
  28. elem.innerHTML +=`<div></div>`;
  29. }
  30. while(true){
  31. elem.children[0].style.backgroundColor="red";
  32. elem.children[2].style.backgroundColor="";
  33. await delay(redTime);
  34. elem.children[1].style.backgroundColor="yellow";
  35. elem.children[0].style.backgroundColor="";
  36. await delay(yellowTime);
  37. elem.children[2].style.backgroundColor="green";
  38. elem.children[1].style.backgroundColor="";
  39. await delay(greenTime);
  40. }
  41. }
  42. trafficLight2(wrapper,3000,1000,3000);
  43. // domEventPromise
  44. function domEventPromise(element, eventName){
  45. return new Promise((resolve) => {
  46. const eventHandler = (event) => {
  47. resolve(event.target);
  48. element.removeEventListener(eventName,eventHandler)
  49. }
  50. element.addEventListener(eventName, eventHandler);
  51. })
  52. }
  53. domEventPromise(knopka, 'click').then(e => console.log('event click happens', e))
  54. // PedestrianTrafficLight
  55. // async function pedestrianLight(elem, redTime =3000, greenTime=3000){
  56. // for(let i=0; i<2; i++){
  57. // elem.innerHTML +=`<div></div>`;
  58. // }
  59. // while(true){
  60. // elem.children[0].style.backgroundColor="red";
  61. // elem.children[1].style.backgroundColor="";
  62. // await Promise.race([delay(redTime), domEventPromise(btnGo, 'click')]);
  63. // elem.children[1].style.backgroundColor="green";
  64. // elem.children[0].style.backgroundColor="";
  65. // await delay(greenTime);
  66. // }
  67. // }
  68. // pedestrianLight(wrapper2, 5000,2000)
  69. // stage 3
  70. async function pedestrianLight(elem, redTime =3000, greenTime=3000){
  71. for(let i=0; i<2; i++){
  72. elem.innerHTML +=`<div></div>`;
  73. }
  74. while(true){
  75. elem.children[0].style.backgroundColor="red";
  76. elem.children[1].style.backgroundColor="";
  77. await Promise.race([delay(redTime), domEventPromise(btnGo, 'click')]);
  78. elem.children[1].style.backgroundColor="green";
  79. elem.children[0].style.backgroundColor="";
  80. await delay(greenTime);
  81. }
  82. }
  83. pedestrianLight(wrapper2, 5000,3000)
  84. btnGo.addEventListener('click', handler)
  85. async function handler(){
  86. btnGo.disabled = true;
  87. await delay(6000)
  88. btnGo.disabled = false;
  89. domEventPromise(knopka, 'click')
  90. }
  91. // speedtest
  92. async function speedtest(getPromise, count,parallel=1){
  93. const startTime = performance.now();
  94. for (let i = 0; i < count; i++){
  95. const arrPromise = [];
  96. await ( async ()=>{
  97. for (j=0; j<parallel; j++){
  98. arrPromise.push(getPromise())
  99. }
  100. await Promise.all(arrPromise);
  101. })()
  102. }
  103. const finishTime = performance.now();
  104. let duration = finishTime - startTime;
  105. return {
  106. duration,
  107. querySpeed: count / duration, //средняя скорость одного запроса
  108. queryDuration: duration/count,
  109. parallelSpeed : (parallel*count)/duration,
  110. parallelDuration: duration/(count * parallel)
  111. }
  112. }
  113. speedtest(() => delay(1000).then(result => console.log(result)), 10, 10 ).then(res=>console.log(res))
  114. // {duration: 10000,
  115. // querySpeed: 0.001, //1 тысячная запроса за миллисекунду
  116. // queryDuration: 1000, //1000 миллисекунд на один реальный запрос в среднем
  117. // parallelSpeed: 0.01 // 100 запросов за 10000 миллисекунд
  118. // parallelDuration: 100 // 100 запросов за 10000 миллисекунд
  119. speedtest(() => fetch('http://swapi.dev/api/people/1').then(res => res.json()), 10, 5).then(res=>console.log(res))