2015-08-15 4 views
4

Для тех пор, как я писал для холста, я всегда делал следующее:Почему вы помещаете requestAnimationFrame перед телом функции?

function animate() { 
    //do stuff in the animation 

    requestAnimationFrame(animate); 
} 

В последнее время, хотя, я часто видел, как это делается так:

function animate() { 
    requestAnimationFrame(); 

    //do stuff in the animation 
} 

В то время как я может, конечно, увидеть преимущества для этого мой путь, (в основном, если есть ошибка, это не вызовет больше кадров). Я не смог найти никаких преимуществ для вызова следующего кадра.

У кого-нибудь есть объяснение для этого/возможных преимуществ для этого? Или, вы можете доказать, что это не должно быть сделано таким образом? Источник определенно необходим, поскольку я видел это во всем Интернете, но никто не может действительно дать конкретную причину этого.

+0

w3c пример он вызван после. http://www.w3.org/TR/animation-timing/ – Loktar

ответ

2

Размещение вызова rAF является более четким, если вы помните, что requestAnimationFrame просто запрашивает поездку в следующем цикле обработки анимации - это фактически не запускает цикл обработки анимации.

Вызов следующего кадра rAF сразу даст вам наилучшие шансы поймать следующий цикл цикла rAF.

Например, если ваш «материал» занимает около 3 мс, а следующий цикл rAF начинается через 4 мс, вы можете поймать следующий цикл за 4 мс, а не на следующий цикл в 4 + 16 мс. Может показаться невозможным, что вы пропустите следующий цикл rAF, так как у вас есть 4-3 == 1 мс (почти целая вечность для процессора), но система может планировать другие вещи, которые съедают ваш запас 1 мс (например, сбор мусора) ,

С другой стороны, если ваш «материал» составляет в среднем 15 мс для завершения, тогда положите свой вызов rAF в конце. Включение последнего может пропустить выполнение после & некоторое время, но это, вероятно, лучше, чем рисковать накоплением нескольких «вещей».

Имея это в виду, в целом, вызов rAF в конце более безопасен при случайной стоимости пропущенного цикла rAF.

+1

Не возникнет ли следующий кадр после того, как стек будет очищен в любом случае, что делает его неуместным, находится ли он в начале или конце функции? –

Смежные вопросы