과거 프로그래밍 자료들/Javascript&typescript
Let's Get IT 자바스크립트 프로그래밍 - 반응속도 테스트, 상위 5개만 보여주기
평부
2022. 7. 14. 23:25
* 출처 : https://thebook.io/080270/part02/ch08/
반응속도
- 파랑 : 초기화면
- 빨강 : 초 시간 제기 전 대기화면, 성급하게 눌렀을 경우 경고 표시
- 초록 : 초 시간 잰 결과물 화면
[반응속도 테스트]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
#screen {
width: 300px;
height: 200px;
text-align: center;
user-select: none;
}
#screen.waiting {
background-color: aqua;
}
#screen.ready {
background-color: red;
color: white;
}
#screen.now {
background-color: greenyellow;
}
</style>
<body>
<div id="screen" class="waiting">클릭해서 시작하세요</div>
<div id="result"></div>
<script>
const $screen = document.querySelector('#screen');
const $result = document.querySelector('#result');
let startTime;
let endTime;
const records = []; //몇 개인지 모름
let timeoutId;
$screen.addEventListener("click", (event) => {
if (event.target.classList.contains('waiting')) { //파랑
$screen.classList.remove('waiting');
$screen.classList.add('ready');
$screen.textContent = "초록색이 되면 클릭하세요";
timeoutId = setTimeout(function () {
startTime = new Date();
$screen.classList.remove('ready');
$screen.classList.add('now');
$screen.textContent = "클릭하세요!";
//시간 재기
}, Math.floor(Math.random() * 1000) + 2000);
//2000 ~ 3000 사이
} else if (event.target.classList.contains('ready')) { //빨강
clearTimeout(timeoutId);
$screen.classList.remove('ready');
$screen.classList.add('waiting');
$screen.textContent = "너무 성급하시군요!";
} else if (event.target.classList.contains('now')) { //초록
//끝 시간 재기
//시간 차이 저장
endTime = new Date();
const current = endTime - startTime;
records.push(current);
const average = records.reduce((a, c) => a + c) / records.length;
$result.textContent = `현재 ${current}ms, 평균: ${average}ms`;
startTime = null; //초기화
endTime = null; //초기화
$screen.classList.remove('now');
$screen.classList.add('waiting');
$screen.textContent = "클릭해서 시작하세요";
}
})
</script>
</body>
</html>
[상위 5개만 보여주기]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
#screen {
width: 300px;
height: 200px;
text-align: center;
user-select: none;
}
#screen.waiting {
background-color: aqua;
}
#screen.ready {
background-color: red;
color: white;
}
#screen.now {
background-color: greenyellow;
}
</style>
<body>
<div id="screen" class="waiting">클릭해서 시작하세요</div>
<div id="result"></div>
<script>
const $screen = document.querySelector('#screen');
const $result = document.querySelector('#result');
let startTime;
let endTime;
const records = []; //몇 개인지 모름
let timeoutId;
$screen.addEventListener("click", (event) => {
if (event.target.classList.contains('waiting')) { //파랑
$screen.classList.remove('waiting');
$screen.classList.add('ready');
$screen.textContent = "초록색이 되면 클릭하세요";
timeoutId = setTimeout(function () {
startTime = new Date();
$screen.classList.remove('ready');
$screen.classList.add('now');
$screen.textContent = "클릭하세요!";
//시간 재기
}, Math.floor(Math.random() * 1000) + 2000);
//2000 ~ 3000 사이
} else if (event.target.classList.contains('ready')) { //빨강
clearTimeout(timeoutId);
$screen.classList.remove('ready');
$screen.classList.add('waiting');
$screen.textContent = "너무 성급하시군요!";
} else if (event.target.classList.contains('now')) { //초록
//끝 시간 재기
//시간 차이 저장
endTime = new Date();
const current = endTime - startTime;
records.push(current);
const average = records.reduce((a, c) => a + c) / records.length;
$result.textContent = `현재 ${current}ms, 평균: ${average}ms`;
startTime = null; //초기화
endTime = null; //초기화
const topFive = records.sort((p, c) => p - c).slice(0, 5);
topFive.forEach((top, index) => {
$result.append(
document.createElement('br'),
`${index + 1} 위 : ${top}ms`
)
})
$screen.classList.remove('now');
$screen.classList.add('waiting');
$screen.textContent = "클릭해서 시작하세요";
}
})
</script>
</body>
</html>
* 상위 5개 선택
- sort 함수 사용
* sort 함수 설명 글 :
https://change-words.tistory.com/64
- forEach 함수 사용
* forEach 함수 설명 글:
https://codechacha.com/ko/javascript-foreach/
* 결과