main.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. //svetofor
  2. const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
  3. async function trafficLight(element, timeGreen, timeYellow, timeRed){
  4. while (true){
  5. element.style.backgroundColor = 'green'
  6. await delay(timeGreen)
  7. element.style.backgroundColor = 'yellow'
  8. await delay(timeYellow)
  9. element.style.backgroundColor = 'red'
  10. await delay(timeRed)
  11. }
  12. }
  13. //domEventPromise
  14. function domEventPromise(element, eventName) {
  15. return new Promise((resolve) => {
  16. element.addEventListener(eventName, function toDelete (e) {
  17. element.removeEventListener(eventName, toDelete)
  18. resolve(e)
  19. })
  20. })
  21. }
  22. //PedestrianTrafficLight
  23. function changeColor(element, color) {
  24. element.style.backgroundColor = color
  25. }
  26. async function pedestrianTrafficLight(element, element2, timeGreen, timeYellow, timeRed) {
  27. while(true) {
  28. delay(timeGreen / 3).then(() => btn.disabled = false)
  29. changeColor(element, 'green')
  30. changeColor(element2, 'red')
  31. await Promise.race([delay(timeGreen), domEventPromise(btn, 'click')])
  32. btn.disabled = true
  33. changeColor(element, 'yellow')
  34. await delay(timeYellow)
  35. changeColor(element, 'red')
  36. changeColor(element2, 'green')
  37. await delay(timeRed)
  38. changeColor(element, 'yellow')
  39. changeColor(element2, 'red')
  40. await delay(timeYellow)
  41. }
  42. }
  43. pedestrianTrafficLight(trafficLightContainer, pedestrianTrafficLightContainer, 10000, 3000, 15000)
  44. //speedtest
  45. async function speedtest(getPromise, count, parallel=1){
  46. let startTime = performance.now()
  47. for (let i = 0; i < count; i++) {
  48. let promises = []
  49. for (let j = 0; j < parallel; j++) {
  50. promises.push(getPromise())
  51. }
  52. await Promise.all(promises)
  53. }
  54. let duration = performance.now() - startTime
  55. let querySpeed = count / duration
  56. let queryDuration = duration / count
  57. let parallelSpeed = (count * parallel) / duration
  58. let parallelDuration = duration / (count * parallel)
  59. return {
  60. duration,
  61. querySpeed,
  62. queryDuration,
  63. parallelSpeed,
  64. parallelDuration
  65. }
  66. }
  67. speedtest(() => delay(1000), 10, 10 ).then(result => console.log(result))
  68. speedtest(() => fetch('http://swapi.dev/api/people/1').then(res => res.json()), 3, 1).then(result => console.log(result))
  69. // async function newTrafficLight(element, timeGreen, timeYellow, timeRed) {
  70. // async function trafficLightImproved(){
  71. // while (a){
  72. // element.style.backgroundColor = 'green'
  73. // if (!a) break
  74. // await delay(timeGreen)
  75. // element.style.backgroundColor = 'yellow'
  76. // if (!a) break
  77. // await delay(timeYellow)
  78. // element.style.backgroundColor = 'red'
  79. // if (!a) break
  80. // await delay(timeRed)
  81. // }
  82. // }
  83. // let a = true;
  84. // // btn.onclick = async () => {
  85. // // a = false;
  86. // // await delay(3000)
  87. // // a = true;
  88. // // trafficLightImproved()
  89. // // }
  90. // trafficLightImproved()
  91. // while (true) {
  92. // await domEventPromise(btn, 'click').then(e => console.log('event click happens', e))
  93. // .then(async () => {
  94. // a = false
  95. // await delay(1000)
  96. // a = true
  97. // trafficLightImproved()
  98. // })
  99. // await delay(5000)
  100. // }
  101. // }
  102. // newTrafficLight(document.body, 5000, 2000, 5000)