Функция requestAnimationFrame лучше setTimeout для анимации, потому что она обеспечивает более высокое качество анимации. 15
В отличие от setTimeout, который использует фиксированные временные интервалы, requestAnimationFrame синхронизируется с частотой обновления дисплея, обычно 60 кадров в секунду, что делает анимацию более плавной. 1
Кроме того, requestAnimationFrame исключает возможность ненужных отрисовок и может связывать вместе несколько анимаций в одно целое и цикл перерисовки. 2 Также она оптимизирует использование CPU, приостанавливая анимацию, когда вкладка или окно не видны пользователю. 1
Таким образом, выбор между этими функциями зависит от конкретных требований к анимации и производительности.