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 dans les coulisses, est requestAnimationFrame faire la queue quand vous l'appelez plusieurs fois?

29
demandé sur David 2013-06-14 12:00:16

2 réponses

vous ne devriez utiliser qu'un seul requestAnimationFrame appel que les appels à requestAnimationFrame faire de la pile. La version single callback est donc plus performante.

5
répondu Erik Schierboom 2013-06-14 08:10:16

le requestAnimationFrame lie un appel de fonction et renvoie le frameID. Demander plusieurs trames N'est pas la même chose que d'ajouter plusieurs écouteurs d'événements à un événement - chacune de vos fonctions est appelée dans un autre trame. Ainsi, si vous demandez plusieurs cadres de façon continue (chaque fonction se rappelle récursivement), vous perdez l'avantage que toutes les mises à jour sont rendues dans un seul cadre. Donc, même s'il y a un framerate élevé les animations peuvent ne pas avoir l'air si lisse.

mais: vous pouvez seulement utilisez cancelAnimationFrame (frameID) pour toutes les méthodes et peut avoir besoin d'un code supplémentaire pour annuler les animations simples

0
répondu Wolfgang 2018-03-25 22:18:15