RomanR 4 years ago
commit
fe3a31cac8
1 changed files with 254 additions and 0 deletions
  1. 254 0
      index.html

+ 254 - 0
index.html

@@ -0,0 +1,254 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+</head>
+<style>
+    #lights,
+    #ptl {
+        width: 200px;
+        background-color: black;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        flex-direction: column;
+        border-radius: 10px;
+        padding: 20px;
+    }
+
+    span {
+        width: 100px;
+        height: 100px;
+        border-radius: 50%;
+        margin: 20px;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        font-size: 30px;
+    }
+
+    #green {
+        background-color: green;
+        visibility: hidden;
+    }
+
+    #yellow {
+        background-color: yellow;
+        visibility: hidden;
+    }
+
+    #red {
+        background-color: red;
+        visibility: hidden;
+    }
+
+    /* #white {
+        background-color: green;
+        visibility: hidden;
+    }
+
+    #pink {
+        background-color: pink;
+        visibility: hidden;
+    }
+
+    #blue {
+        background-color: blue;
+        visibility: hidden;
+    } */
+    #green_ptl {
+        background-color: green;
+        visibility: hidden;
+    }
+
+    #red_ptl {
+        background-color: red;
+        visibility: hidden;
+    }
+
+    .box_btn_lights,
+    .box_btn_ptl {
+        margin-bottom: 30px;
+    }
+
+    button {
+        height: 30px;
+        /* width: 60px; */
+    }
+</style>
+
+<body>
+    <div id="lights">
+        <span id="green"></span>
+        <span id="yellow"></span>
+        <span id="red"></span>
+        <!-- <span id="pink"></span>
+        <span id="blue"></span>
+        <span id="white"></span> -->
+    </div>
+    <div class="box_btn_lights">
+        <button class="knopka">domEventPromise</button>
+    </div>
+    <div id="ptl">
+        <span id="green_ptl"></span>
+        <span id="red_ptl"></span>
+    </div>
+    <div class="box_btn_ptl">
+        <button class="knopka_ptl">GO</button>
+    </div>
+
+    <!-- <button id='button'>click here</button> -->
+    <script>
+        let greenL = document.getElementById('green')
+        let yellowL = document.getElementById('yellow')
+        let redL = document.getElementById('red')
+        // let pinkL = document.getElementById('pink')
+        // let blueL = document.getElementById('blue')
+        // let whiteL = document.getElementById('white')
+        // let button = document.getElementById('button')
+        let greenPTL = document.getElementById('green_ptl')
+        let redPTL = document.getElementById('red_ptl')
+
+        let knopka = document.querySelector('.knopka')
+        let knopkaPTL = document.querySelector('.knopka_ptl')
+
+        const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
+
+        // trafficLight && Stage 2
+
+        function timer(item, ms) {
+            for (let j = 0; j <= (+`${(ms/1000)}`); j++) {
+                setTimeout(() => (j == (+`${(ms/1000)}`)) ? console.log("поехали") : item
+                    .innerText = (+`${(ms/1000)}`) - j, `${j * 1000}`)
+            }
+        }
+
+        async function trafficLight(...args) {
+            //debugger
+            while (true) {
+                for (i in args) {
+                    args[i].style.visibility = 'visible';
+                    timer(args[i], 3000)
+                    await delay(3000)
+                    args[i].style.visibility = 'hidden'
+                }
+            }
+        }
+        trafficLight(greenL, yellowL, redL) //, pinkL, blueL, whiteL
+
+        // async function trafficLight() {
+        //     while (true) {
+        //         greenL.style.visibility = 'visible' //включаем зеленый
+        //         await delay(3000) //время зеленого
+        //         greenL.style.visibility = 'hidden'
+        //         yellowL.style.visibility = 'visible'
+        //         await delay(3000) //время желтого
+        //         yellowL.style.visibility = 'hidden'
+        //         redL.style.visibility = 'visible'
+        //         await delay(3000) //время красного
+        //         redL.style.visibility = 'hidden'
+        //     }
+        // }
+        // trafficLight()
+
+
+        //-------------------domEventPromise--------------------
+        function domEventPromise(domElem, eventName) {
+            return new Promise((resolve, reject) => { // executor
+                domElem.addEventListener(eventName, f);
+
+                function f() {
+                    console.log('hi');
+                    resolve(event); //резолвим нашу кнопку
+                    domElem.removeEventListener(eventName, f);
+                };
+            });
+        };
+        // console.log(domEventPromise(knopka, 'click'))
+        domEventPromise(knopka, 'click').then(e => console.log('event click happens', e)); //e - 
+
+  
+             
+        //PedestrianTrafficLight
+        async function PedestrianTrafficLight(green, red) {
+            while (true) {
+                green.style.visibility = 'visible';
+                timer(green, 5000);
+                await delay(5000);
+                green.style.visibility = 'hidden';
+                red.style.visibility = 'visible';
+                timer(red, 5000);
+                let user = await Promise.race(
+                    [domEventPromise(knopkaPTL, 'click'), 
+                    delay(5000)]);
+                    if(user == event) {
+                    console.log('event click happens', event)
+                    await delay(2000);
+                }
+                red.style.visibility = 'hidden';
+            }
+        }
+
+        PedestrianTrafficLight(greenPTL, redPTL); //, pinkL, blueL, whiteL
+
+
+        //speedtest
+        const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
+
+        async function speedtest(getPromise, count, parallel = 1) {
+            let querySpeed = 0;
+            let queryDuration = 0;
+            let parallelDuration = 0;
+            let parallelSpeed = 0;
+            let StartTime = performance.now()
+            for (let i = 0; i < count; i++) {
+                let PromiseArr = []
+                for (let j = 0; j < parallel; j++) {
+                    //let count;
+                    PromiseArr.push(getPromise())
+                }
+                await Promise.all(PromiseArr);
+                console.log(PromiseArr)
+            }
+
+
+            let stopTime = performance.now()
+            duration = stopTime - StartTime
+            parallelDuration = duration / (count * parallel)
+            parallelSpeed = 1 / parallelDuration
+            queryDuration = duration / count
+            querySpeed = 1 / queryDuration //count / duration
+
+
+            console.log('duration: ' + duration)
+            console.log('queryDuration: ' + queryDuration)
+            console.log('querySpeed: ' + querySpeed)
+            console.log('parallelDuration: ' + parallelDuration)
+            console.log('parallelSpeed: ' + parallelSpeed)
+            console.log()
+
+
+
+            return {
+                duration,
+                querySpeed, //средняя скорость одного запроса
+                queryDuration, //
+                parallelSpeed,
+                parallelDuration
+            }
+        }
+
+        speedtest(() => delay(1000), 10, 10).then(result => console.log(result))
+        // {duration: 10000, 
+        // querySpeed: 0.001, //1 тысячная запроса за миллисекунду 1/1000
+        // 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)
+    </script>
+</body>
+
+</html>