requestAnimationFrame

У браузера существует собственный цикл перерисовки страницы (предположительно раз в 20ms).

Функции перерисовки, задаваемые пользователем могут совпадать или не совпадать с циклом перерисовки браузера. В последнем случае (из-за несовпадения) происходят излишние расчеты, что увиличивает нагрузку на CPU и увеличивает расход энергии что актуально для мобильных устройств.

Функция - обертка браузера requestAnimationFrame позволяет синхронизировать вызовы пользовательской функции с расчетами браузера, что заметно влияет на плавность отображения, снижает нагрузку на CPU и расход энергии.

var requestId = requestAnimationFrame(callback)

function repeatOften() {
    // Do whatever
    requestAnimationFrame(repeatOften);
}
repeatOften();                
// cancelAnimationFrame(requestId);

Подробнее на MDN