Quelle est la différence?
Oui. Un Délai d'attente exécute un certain laps de temps après setTimeout() est appelée; un Intervalle exécute un certain laps de temps après l'intervalle précédent tiré.
Vous remarquerez la différence si votre doStuff() la fonction prend un certain temps à s'exécuter. Par exemple, si nous représentons un appel à setTimeout/setInterval avec .
, un tir de la temporisation/intervalle de *
et l'exécution de code JavaScript avec [-----]
, les délais ressembler à:
Timeout:
. * . * . * . * .
[--] [--] [--] [--]
Interval:
. * * * * * *
[--] [--] [--] [--] [--] [--]
La prochaine complication est que si un intervalle de feux alors que JavaScript est déjà occupé à faire quelque chose (comme la manipulation d'un intervalle précédent). Dans ce cas, l'intervalle est de rappeler, et se produit dès que la précédente gestionnaire termine et retourne le contrôle au navigateur. Donc par exemple pour un doStuff() processus qui est parfois court ([-]) et parfois long ([-----]):
. * * • * • * *
[-] [-----][-][-----][-][-] [-]
• représente un intervalle de tir qui n'a pas pu exécuter son code tout de suite, et a été prise jusqu'à la place.
Si les intervalles d'essayer de "rattraper" pour reprendre le rythme. Mais, ils n'ont pas de file d'attente de l'un sur l'autre: il ne peut jamais être une exécution en attente par intervalle. (Si ils sont tous en file d'attente, le navigateur à gauche avec une liste sans cesse croissante de l'encours des exécutions!)
. * • • x • • x
[------][------][------][------]
x représente un intervalle de tir qui n'a pas pu exécuter ou mis en attente, de sorte que la place a été écartée.
Si votre doStuff() la fonction prend habituellement plus de temps pour exécuter que l'intervalle est défini pour elle, le navigateur va manger 100% de CPU en essayant de service, et peut devenir moins sensible.
Lequel utilisez-vous et pourquoi?
Enchaînés-Timeout donne une garantie de la fente de temps libre pour le navigateur; Intervalle essaie de faire en sorte que la fonction elle est en cours d'exécution exécute aussi proche que possible de ses heures programmées, au détriment de navigateur de l'INTERFACE utilisateur de la disponibilité.
Je considère un intervalle de temps pour un hors d'animations que j'ai voulu être aussi lisse que possible, tout en enchaînés délais d'attente sont plus poli pour la poursuite des animations qui auront lieu tout le temps, tandis que la page est chargée. Pour les moins exigeants utilise (comme un banal programme de mise à jour de cuisson toutes les 30 secondes ou quelque chose), vous pouvez utiliser en toute sécurité.
En termes de compatibilité de navigateur, setTimeout est antérieure à setInterval, mais tous les navigateurs, vous allez rencontrer aujourd'hui, le soutien à la fois. Le dernier traine depuis de nombreuses années a été IE Mobile dans WinMo <6.5, mais nous espérons que trop est maintenant derrière nous.