main.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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))