Test D'Un
J'ai écrit un test spécialement à cette fin:
Cadence de Distribution: setInterval vs requestAnimationFrame
Remarque: Ce test est très consommateur d'UC. requestAnimationFrame
n'est pas pris en charge par IE (sauf IE 10) et de l'Opéra.
Le test de journaux le temps réel qu'il faut pour un setInterval
et requestAnimationFrame
à exécuter dans les différents navigateurs, et vous donne les résultats sous la forme d'une distribution. Vous pouvez modifier le nombre de millisecondes pour setInterval
pour voir comment il fonctionne sous différents réglages. setTimeout
fonctionne de façon similaire à un setInterval
avec le respect des délais. requestAnimationFrame
généralement les valeurs par défaut pour le 60fps en fonction du navigateur. Pour voir ce qui se passe lorsque vous basculez vers un autre onglet ou avoir une fenêtre inactive, il suffit d'ouvrir la page, passer à un autre onglet et attendre pendant un certain temps. Il continue d'enregistrer le réel le temps qu'il faut pour que ces fonctions dans un onglet inactif.
Test De Deux
Une autre façon de tester est de vous connecter à l'horodatage à plusieurs reprises avec setInterval
et requestAnimationFrame
et l'afficher dans un décollement de la console. Vous pouvez voir comment il est fréquemment mis à jour (ou si elle est jamais mis à jour) lorsque vous faites l'onglet ou la fenêtre inactive.
Résultats
Internet Explorer
IE ne limite pas le retard dans l' setInterval
lorsque l'onglet est inactif. Cependant, IE10 pauses requestAnimationFrame
dans les onglets inactifs. Il n'a pas d'importance si la fenêtre est de se concentrer ou pas.
Safari
Safari ne fait pas de pauses setInterval
lorsque l'onglet ou la fenêtre est inactive. Il continue de fonctionner à la normale intervalles répétés, comme si l'onglet ou la fenêtre est toujours active. requestAnimationFrame
est en pause dans les onglets inactifs.
Firefox
Firefox limites de l'intervalle minimum de setInterval
autour de 1000ms lorsque l'onglet est inactif. Si l'intervalle est supérieur à 1000ms, il sera exécuté à l'intervalle spécifié. Il n'a pas d'importance si la fenêtre est de se concentrer, l'intervalle est limitée uniquement lorsque vous basculez vers un autre onglet. requestAnimationFrame
est plafonné à un cadre par de 1 à 3 secondes lorsque l'onglet est inactif.
// 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
Chrome
Similaire à Firefox, Chrome limites de l'intervalle minimum de setInterval
autour de 1000ms lorsque l'onglet (pas de la fenêtre) est inactif. requestAnimationFrame
est en pause lorsque l'onglet est inactif.
// Provides control over the minimum timer interval for background tabs.
const double kBackgroundTabTimerInterval = 1.0;
https://codereview.chromium.org/6546021/patch/1001/2001
Opéra
L'opéra n'a pas de limite de setInterval
lorsque l'onglet est inactif. requestAnimationFrame
n'est pas pris en charge.
Résumé
Répéter à intervalles onglets inactifs:
setInterval requestAnimationFrame
IE pas affecté en pause
Safari pas affecté en pause
Firefox >=1000ms 1s - 3s
Chrome >=1000ms pause
L'opéra de pas touché pas pris en charge