Plusieurs requestAnimationFrame performance
Si je suis en train de faire de multiples animations, est-il acceptable de performance pour ajouter plusieurs requestAnimationFrame
rappels? F. ex:
function anim1() {
//animate element 1
}
function anim2() {
//animate element 2
}
function anim3() {
//animate element 3
}
requestAnimationFrame(anim1);
requestAnimationFrame(anim2);
requestAnimationFrame(anim3);
Ou est-il prouvé pire qu'à l'aide d'un simple rappel:
(function anim() {
requestAnimationFrame(anim);
anim1();
anim2();
anim3();
}());
Je demande parce que je ne sais pas vraiment ce qui se passe derrière les coulisses, est requestAnimationFrame
files d'attente des rappels lorsque vous l'appeler plusieurs fois?
Vous devez vous connecter pour publier un commentaire.
Vous devriez être en utilisant seulement un
requestAnimationFrame
appel que les appels àrequestAnimationFrame
faire de la pile. Le seul rappel de la version est donc plus performant.Quelqu'un étalonnés cette. Parlons-en...
https://jsperf.com/single-raf-draw-calls-vs-multiple-raf-draw-calls
J'ai regardé la comparaison des performances (vous devriez aussi). Vous êtes les bienvenus pour en désaccord. Ce sont des primitives de dessin sur une toile élément.
Je pense que ce code est vraiment l'analyse comparative de 7 appels à timestamp() vs 2 appels à timestamp(). Regardez la différence entre Chrome 46 et 47.
Je pense que c'est tellement bien optimisé qu'il ne fait pas de différence. C'est juste de mesure de bruit à ce point.
Mon résumé est ce n'a pas besoin d'être optimisé pour mon application.
Si vous êtes inquiet au sujet de la performance de regarder la différence entre Chrome 59 de 1,8 m (ops/sec) vs Chrome 71 (506k ops/sec).
La requestAnimationFrame se lie à un appel de fonction et renvoie le frameID. Demander plusieurs images n'est PAS la même, comme l'ajout de plusieurs écouteurs d'événement pour un événement chaque de vos fonctions est appelé dans un autre cadre.
Donc, si vous en continu (chaque fonction se rappelle elle-même de manière récursive) demande de plusieurs images, vous êtes de perdre l'avantage que toutes les mises à jour sont rendus dans une image. Donc, même si il y a un haut taux de rafraîchissement animations peuvent ne pas sembler lisse.
Mais: vous ne pouvez utiliser cancelAnimationFrame(frameID) pour toutes les méthodes et mai besoin d'un peu plus de code pour annuler unique animations