Est-ce que la méthode JavaScript SintinTerval attendait (au moins) l'intervalle spécifié entre deux exécutions du code spécifique ou attend-il cet intervalle entre la finition de l'exécution précédente et le début de la prochaine exécution? P>
(ou, lors de la comparaison sur les méthodes de Java's SPANDUREDEXECUTETORSERTORSERTORSERTORSERTORSERTORSERTORSERTORSERTORSERTORSERTORSERTORSERTORSERTORSERTRES - est SimpleVal Similaire vers
ScheduleAtfixeDrate () Code> ou plutôt
Schechewithfixeddelay () Code>?) p>
3 Réponses :
Cette réponse inclut l'aide du commentaire de Jidonnier ci-dessous. P>
JavaScript est unique à filetage et la même fonction ne peut pas fonctionner deux fois en même temps. Cependant, le délai de seinterval ne prend pas en compte la durée de fonctionnement pour exécuter la fonction. P>
Par exemple, dites que votre fonction seinterval prend 500 millisecondes à exécuter et votre retard est de 1000 millisecondes. Cela conduirait à un délai de 500 millisecondes avant que la fonction commence à nouveau. P>
C'est faux. JavaScript est uniquement fileté de sorte que l'intervalle suivant ne peut pas démarrer avant que l'intervalle précédent soit terminé. En d'autres termes, le code de deux itérations ne peut pas fonctionner en même temps.
@ jfien00 alors comment deux animations dans une page sont-elles simultanément?
@kiranvj - Deux animations peuvent "apparaître" à exécuter simultanément en utilisant deux minuteries distinctes où une minuterie s'exécute lorsque l'autre attend sa prochaine coche ou en déplaçant simplement deux objets sur chaque ticker. Les animations sont en fait de nombreuses motions individuelles qui ont l'air lisse lorsqu'elles sont assez rapides que notre œil ne voit pas les mouvements individuels, mais il y a souvent beaucoup de temps pour un ordinateur pour faire d'autres choses entre chaque image (y compris une autre animation).
Oui, j'accepte cela dans une implémentation de bas niveau, même des threads simultanés fonctionne comme celui-ci s'il n'y a qu'un seul microprocesseur. Même le système d'exploitation est multiplié comme celui-ci. Mais dans un scénario de haut niveau, nous pouvons dire, avec JavaScript, nous pouvons mettre en œuvre la multithreading en utilisant SettimeOut.
Si vous appelez Si le rappel prend 1050 strong> millisecondes, le prochain allumera immédiatement après la fin de la première finition (avec donc dans Java World Ceci est similaire à Le code ci-dessus attendra exactement 1000 millisecondes après seinterval code> avec
SchedgeatFixeDrate () Code>
. Si vous avez besoin SchecheWithfixeddelay () code> comportement, vous devez utiliser
Settimeout () code> et reporter recordback chacun temps il finit: p>
rappel () code> terminé avant de la reprendre, peu importe combien de temps il a fallu courir. p> p>
Comme vous pouvez le voir dans Cet étui de test Jsfiddle , seinterval tente de garder l'intervalle à temps indépendamment Depuis combien de temps le code qui fonctionne sur l'intervalle prend aussi longtemps que ce code prend moins de temps que l'intervalle est défini pour. Donc, si vous avez un intervalle défini pendant 5 secondes et que le code qui fonctionne sur chaque intervalle prend 200 ms, chaque intervalle doit encore être à 5 secondes (ou aussi près qu'un seul moteur JavaScript à filetage peut atteindre 5 secondes). p>
Si, d'autre part, le code que vous exécutez sur chaque intervalle prend une longueur d'intervalle elle-même pour exécuter, car JavaScript est uniforme unique, l'intervalle suivant ne commencera pas à temps et sera retardé en raison du dépassement de temps. du code du premier intervalle. p>
Ces deux cas sont visibles dans ce cas de test de travail en ajustant le temps de retard. P>
cas de test de travail ici: http://jsfiddle.net/jfriend00/kgqsq/ p>