점령 관련 클래스를 작성하다보니 타이머가 필요하다고 느꼈다.
class Timer {
constructor(duration, callback) {
this.duration = duration;
this.remainingTime = duration;
this.callback = callback;
this.timer = null;
this.startTime = null;
}
start() {
if (this.timer !== null) return;
this.startTime = Date.now();
this.timer = setTimeout(() => {
this.callback();
this.clear();
}, this.remainingTime);
}
pause() {
if (!this.timer) return;
this.clear();
this.remainingTime -= Date.now() - this.startTime;
}
resume() {
if (this.timer || this.remainingTime <= 0) return;
this.start();
}
clear() {
clearTimeout(this.timer);
this.timer = null;
}
}
해당 클래스는 원하는 시간과 실행할 콜백함수를 인스턴스 생성 시 입력받고 시작, 일시정지, 재개, 초기화 단계로 구성되어 있다.
CPU 과부하
점령 시 setInteval
, setTimeout
이 빈번히 사용될 것 같은데 이 두가지는 기본적으로 이벤트 루프에 의존하여 실행된다. 각 타이머가 짧은 시간 반복되면 타이머들 간의 레이스 컨디션 문제가 발생할 수 있다고 생각이 든다.
메모리 문제
각 타이머는 메모리 자원을 차지하는데 너무 많은 setInteval
, setTimeout
으로 인해 가비지 컬렉션의 발생 빈도가 잦을 것으로 예상된다.
만약 체크하지 못한 종료가 되지 않는 문제가 있으면 메모리 누수 발생 문제도 발생할 것이다.
이 두가지 문제로 인한 시스템 성능 저하 문제가 야기될 것 같은데..
다른 방안이 생각날 때까지 구현하다가 테스트 하고 결정해야 할 것 같다.
점령 관련 클래스는 아직 미완성으로 내일쯤 완료될 것 같다.