Frontend

브라우저 탭이 활성 상태인지 확인하는 방법

미래 감자 2025. 4. 25. 18:25

웹 서비스를 개발하다 보면, 사용자가 현재 페이지를 보고 있는지 여부가 중요한 경우가 있다. 

사용자가 여러개의 탭을 열어두고 사용하는 경우 사용자가 보고 있지 않은 탭에서 불필요한 리소스가 계속 사용될 수 있다.

이럴 때 사용할 수 있는 브라우저 API가 바로 Page Visibility API 이다.

 


💁🏻 적용 가이드

탭이 비활성 상태일 때 API 요청을 줄이고 리소스를 아끼고 싶을 때
사용자 활동을 로그로 남기고 싶을 때
탭 비활성화 중에는 애니메이션이나 알림을 중단하거나 지연하고 싶을 때

 

✅  Page Visibility

document.addEventListener('visibilitychange', () => {
  if (document.visibilityState === 'visible') {
    console.log('탭이 활성화됨');
    // API 재요청 또는 애니메이션 재개 등
  } else {
    console.log('탭이 비활성화됨');
    // 리소스 절약 또는 작업 일시 중단
  }
});

 

- visibilityState가 갖는 상태 값

visible 현재 탭이 포커스 상태
hidden 탭이 백그라운드에 있음
prerender 일부 브라우저에서 지원, 사전 렌더링 중
unloaded 페이지 언로드 중 (거의 사용 안 함)

※ 대부분의 경우는 visible 또는 hidden 두 가지 값만 사용

 

✅ 적용 예시

사용자가 탭을 보고 있지 않은 경우에도 지속적으로 api를 호출하는 것은 리소스 낭비로 이어진다.
이런 경우 탭의 활성 상태를 확인하고 interval을 on/off 할 수 있다.

let interval;
document.addEventListener('visibilitychange', () => {
  if (document.visibilityState === 'visible') {
    interval = setInterval(fetchData, 3000);
  } else {
    clearInterval(interval);
  }
});

 
사용자의 탭 활성 상태를 감지하고 상태에 맞게 코드를 작성하는 건 UX 향상성능 최적화에 좋은 방법이다.