25

Wenn ich mehrere Animationen mache, ist es in der Leistung leistungsmäßig, mehrere requestAnimationFrame Rückrufe hinzuzufügen? F.ex:Mehrere AnfrageAnimationFrame Leistung

function anim1() { 
    // animate element 1 
} 

function anim2() { 
    // animate element 2 
} 

function anim3() { 
    // animate element 3 
} 

requestAnimationFrame(anim1); 
requestAnimationFrame(anim2); 
requestAnimationFrame(anim3); 

Oder ist es erwiesen, schlimmer als eine einzelne Rückruf mit:

(function anim() { 
    requestAnimationFrame(anim); 
    anim1(); 
    anim2(); 
    anim3(); 
}()); 

Ich frage, weil ich nicht wirklich wissen, was hinter den Kulissen vor sich geht, ist requestAnimationFrame Queuing Callbacks, wenn Sie es mehrmals aufrufen?

Antwort

4

Sie sollten nur einen requestAnimationFrame Anruf als Anrufe zu requestAnimationFrame tun Stapel verwenden. Die einzelne Callback-Version ist somit leistungsfähiger.

+8

Sind Sie sich sicher? Laut http://www.w3.org/TR/animation-timing/#FrameRequestCallback werden die Callbacks in einer Liste gespeichert und der Reihe nach ausgeführt. Warum wäre ein einzelner Callback mit 3 Animationen effizienter als 3 Callbacks mit 1 Animation? – David

+1

@David Für die einfache Tatsache, dass Sie 2 Funktionsaufrufe weniger machen. –

+3

@ErikSchierboom hat Recht, weniger Funktionsaufrufe entsprechen weniger Overhead im Stack. Allerdings kann ich die Anwendung besonders für kurzlebige Animationen sehen, die selten zum Kodieren der Einfachheit außerhalb der Hauptschleife leben. Darüber hinaus kann das Entfernen von Verzweigungen aus einer "heißen Schleife" in der Hauptschleife JIT-Compiler reduzieren, die durch Verknüpfen, Aufheben der Verknüpfung, Erstellen nativer Objekte usw. verursacht werden. – mattdlockyer

Verwandte Themen