[TIL] 24.11.17 SUN

GDORI·2024년 11월 17일
0

TIL

목록 보기
105/143
post-thumbnail

점령 관련 클래스를 작성하다보니 타이머가 필요하다고 느꼈다.

Timer 클래스

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;
  }
}

해당 클래스는 원하는 시간과 실행할 콜백함수를 인스턴스 생성 시 입력받고 시작, 일시정지, 재개, 초기화 단계로 구성되어 있다.

아주 고민이야..

  1. CPU 과부하
    점령 시 setInteval, setTimeout이 빈번히 사용될 것 같은데 이 두가지는 기본적으로 이벤트 루프에 의존하여 실행된다. 각 타이머가 짧은 시간 반복되면 타이머들 간의 레이스 컨디션 문제가 발생할 수 있다고 생각이 든다.

  2. 메모리 문제
    각 타이머는 메모리 자원을 차지하는데 너무 많은 setInteval, setTimeout으로 인해 가비지 컬렉션의 발생 빈도가 잦을 것으로 예상된다.
    만약 체크하지 못한 종료가 되지 않는 문제가 있으면 메모리 누수 발생 문제도 발생할 것이다.

이 두가지 문제로 인한 시스템 성능 저하 문제가 야기될 것 같은데..
다른 방안이 생각날 때까지 구현하다가 테스트 하고 결정해야 할 것 같다.

점령 관련 클래스는 아직 미완성으로 내일쯤 완료될 것 같다.

profile
하루 최소 1시간이라도 공부하자..

0개의 댓글