setTimeout и setInterval не особенно подходят для времени автономной работы и потребления процессора
Давайте будем честными: ни один не requestAnimationFrame
. Разница в том, что RAF автоматически отключается при выходе из вкладки. Это поведение можно эмулировать с помощью setTimeout
, если вы используете API видимости страницы , однако в действительности проблемы энергопотребления между ними примерно такие же, если использовать их разумно.
Помимо этого, setTimeout\Interval
идеально подходит для использования в вашем случае. Единственное, о чем вы, возможно, захотите знать, - это то, что вам будет трудно получить его идеально синхронизированным с циклом рендеринга. У вас будут случаи, когда вы можете нарисовать один слишком много раз, прежде чем ваше обновление анимации попадет, что может привести к небольшому заиканию. Если вы выполняете рендеринг с частотой 60 Гц и обновляете с частотой 30 Гц, это не должно быть большой проблемой, но вы должны знать об этом.
Если для вас важно поддерживать идеальную синхронизацию с циклом рендеринга, вы можете просто иметь if(framecount % 2) { updateLogic(); }
в верхней части обратного вызова RAF, который эффективно ограничивает ваши обновления до 30 Гц (каждый второй кадр), и он всегда синхронизирован с ничьей.