하나를 테스트
이 목적을 위해 특별히 테스트를 작성했습니다 :
프레임 속도 분포 : setInterval vs requestAnimationFrame
참고 :이 테스트는 CPU를 많이 사용합니다. requestAnimationFrameIE 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 일시 중지