У браузера существует собственный цикл перерисовки страницы (предположительно раз в 20ms).
Функции перерисовки, задаваемые пользователем могут совпадать или не совпадать с циклом перерисовки браузера. В последнем случае (из-за несовпадения) происходят излишние расчеты, что увиличивает нагрузку на CPU и увеличивает расход энергии что актуально для мобильных устройств.
Функция - обертка браузера requestAnimationFrame позволяет синхронизировать вызовы пользовательской функции с расчетами браузера, что заметно влияет на плавность отображения, снижает нагрузку на CPU и расход энергии.
var requestId = requestAnimationFrame(callback)
function repeatOften() {
// Do whatever
requestAnimationFrame(repeatOften);
}
repeatOften();
// cancelAnimationFrame(requestId);
Подробнее на MDN