25

Jeśli robię wiele animacji, czy jest w porządku pod względem wydajności, aby dodać wiele wywołań zwrotnych requestAnimationFrame? F.ex:Wiele requestAnimationFrame wydajność

function anim1() { 
    // animate element 1 
} 

function anim2() { 
    // animate element 2 
} 

function anim3() { 
    // animate element 3 
} 

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

Albo jest to udowodnione gorzej niż za pomocą jednego wywołania zwrotnego:

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

Pytam, bo ja naprawdę nie wiem, co się dzieje za kulisami, to requestAnimationFrame kolejkowanie wywołań zwrotnych, gdy wywołujesz go wiele razy?

Odpowiedz

4

Powinieneś używać tylko jednego połączenia requestAnimationFrame jako połączenia z requestAnimationFrame do stosu. Wersja pojedynczego wywołania zwrotnego jest więc bardziej wydajna.

+8

Czy jesteś tego pewien? Zgodnie z http://www.w3.org/TR/animation-timing/#FrameRequestCallback, wywołania zwrotne są przechowywane na liście i wykonywane w kolejności. Dlaczego jedno wywołanie zwrotne z 3 animacjami byłoby bardziej wydajne niż 3 wywołania zwrotne z 1 animacją? – David

+1

@David Za prosty fakt, że dwa wywołania funkcji są mniejsze. –

+3

@ErikSchierboom ma rację, mniej wywołań funkcji będzie mniejszy narzut w stosie. Jednak widzę aplikację specjalnie dla krótkotrwałych animacji, które nierzadko wystrzelają poza główną pętlę, aby ułatwić kodowanie. Dodatkowo, usunięcie dowolnego rozgałęzienia z "gorącej pętli" w głównej pętli może zmniejszyć jakikolwiek kompilator JIT, powodując łączenie, rozłączanie, tworzenie natywnych obiektów itp. – mattdlockyer