В настоящее время я передаю содержимое WebGL с использованием requestAnimationFrame
, который работает в (идеально) 60 FPS. Я также параллельно планирую процесс «обновления», который обрабатывает AI, физику и т. Д., Используя setTimeout
. Я использую последнее, потому что мне действительно нужно обновлять объекты примерно 30 раз в секунду, и это не является частью последовательности рисования; было бы неплохо сохранить оставшийся процессор для фактических проходов рендеринга, так как большинство моих анимаций довольно интенсивно аппаратно.Планирование обновления «потоков» в JS/WebGL
Мой вопрос является одним из лучших практик. setTimeout
и setInterval
не особенно подходят для работы от батареи и потребления процессора, особенно если браузер не находится в фокусе. С другой стороны, использование requestAnimationFrame
(или привязка обновлений непосредственно к существующей фазе визуализации) потенциально обеспечит гораздо больше обновлений каждую секунду, чем это абсолютно необходимо, и может полностью перестать обновляться, когда браузер не находится в фокусе или в другое время браузер считает «ненужным» для «анимации».
Что является лучшим средством для обновления, но не рендеринга контента?
Спасибо! Единственный недостаток, который я могу придумать для непосредственного присоединения к циклу рендеринга, заключается в том, что обновления могут приостанавливаться, когда пользователь переключает вкладки, но теперь, когда я думаю об этом, это может быть предпочтительным результатом (потому что если они переключают вкладки они, очевидно, не в состоянии, как пользователь, использовать обновления). Все, что действительно нуждается в обновлении в фоновом режиме, может просто перейти в свой собственный интервал. – sinisterchipmunk