하나를 테스트
이 목적을 위해 특별히 테스트를 작성했습니다 :
프레임 속도 분포 : setInterval vs requestAnimationFrame
참고 :이 테스트는 CPU를 많이 사용합니다. requestAnimationFrame
IE 9 및 Opera 12에서는 지원되지 않습니다.
이 테스트는 a setInterval
및 requestAnimationFrame
다른 브라우저에서 실행 하는 데 걸리는 실제 시간을 기록하고 배포 형태로 결과를 제공합니다. setInterval
다른 설정에서 어떻게 실행되는지 확인 하기 위해 밀리 초 수를 변경할 수 있습니다 . 지연과 관련하여 setTimeout
유사하게 작동합니다 setInterval
. requestAnimationFrame
일반적으로 브라우저에 따라 기본값은 60fps입니다. 다른 탭으로 전환하거나 비활성 창이있을 때 발생하는 상황을 보려면 페이지를 열고 다른 탭으로 전환 한 후 잠시 기다리십시오. 이 기능에 걸리는 실제 시간은 비활성 탭에 계속 기록됩니다.
테스트 2
그것을 테스트하는 또 다른 방법은 반복적으로 타임 스탬프를 기록하는 것입니다 setInterval
과 requestAnimationFrame
와 분리 된 콘솔에서 봅니다. 탭이나 창을 비활성화 할 때 업데이트 빈도 또는 업데이트 빈도를 확인할 수 있습니다.
결과
Chrome
Chrome setInterval
은 탭이 비활성 상태 일 때 최소 간격 을 약 1000ms로 제한합니다 . 간격이 1000ms보다 높으면 지정된 간격으로 실행됩니다. 창의 초점이 맞지 않으면 상관 없습니다. 간격은 다른 탭으로 전환 할 때만 제한됩니다. requestAnimationFrame
탭이 비활성화되면 일시 중지됩니다.
// Provides control over the minimum timer interval for background tabs.
const double kBackgroundTabTimerInterval = 1.0;
https://codereview.chromium.org/6546021/patch/1001/2001
Firefox
Chrome과 유사하게 Firefox setInterval
는 탭 (창 아님)이 비활성 상태 일 때 최소 간격 을 약 1000ms로 제한합니다 . 그러나 requestAnimationFrame
탭이 비활성화되면 각 프레임이 1 초, 2 초, 4 초, 8 초 등을 차지하는 등 지수 적으로 느리게 실행됩니다.
// The default shortest interval/timeout we permit
#define DEFAULT_MIN_TIMEOUT_VALUE 4 // 4ms
#define DEFAULT_MIN_BACKGROUND_TIMEOUT_VALUE 1000 // 1000ms
https://hg.mozilla.org/releases/mozilla-release/file/0bf1cadfb004/dom/base/nsGlobalWindow.cpp#l296
Internet Explorer
IE는 setInterval
탭이 비활성화 될 때 의 지연을 제한하지 않지만 requestAnimationFrame
비활성 탭 에서는 일시 중지합니다. 창의 초점이 맞지 않는지 여부는 중요하지 않습니다.
Edge
14부터 Edge setInterval
는 비활성 탭에서 1000ms로 제한됩니다. requestAnimationFrame
비활성 탭에서는 항상 일시 중지됩니다.
Safari
Chrome과 마찬가지로 Safari setInterval
는 탭이 비활성 상태 일 때 1000ms로 제한됩니다. requestAnimationFrame
또한 일시 중지됩니다.
Opera
웹킷 엔진을 채택한 이후로 Opera는 Chrome과 동일한 동작을 나타냅니다. setInterval
은 1000ms로 제한되며 requestAnimationFrame
탭이 비활성화되면 일시 중지됩니다.
요약
비활성 탭의 반복 간격 :
setInterval requestAnimationFrame
Chrome
9- 영향을받지 않음
일시 중지되지 않은 10 개
11+> = 1000ms 일시 중지
Firefox
3- 영향을받지 않음
4 영향을받지 않은 1s
5+> = 1000ms 2 n s (n = 비활성 이후 프레임 수)
IE
9- 영향을받지 않음
일시 중지되지 않은 10+
가장자리
13- 일시 중지되지 않은 영향
14+> = 1000ms 일시 중지
원정 여행
5- 영향을받지 않음
6 일시 중지되지 않은 영향
7+> = 1000ms 일시 중지
오페라
12- 영향을받지 않음
15+> = 1000ms 일시 중지