Выбор ответа Middle Web API и воркеры обновлено

requestAnimationFrame против setInterval

Вопрос

Почему для JS-анимации берут requestAnimationFrame, а не setInterval(fn, 16)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: rAF вызывается перед отрисовкой кадра в такт экрану и спит в фоне. rAF синхронизирован с циклом отрисовки: колбэк выполняется перед кадром, поэтому изменения не рвутся и не делаются дважды за кадр.

Варианты ответа

  1. rAF выполняется в отдельном потоке композитора и не нагружает главный
  2. rAF гарантирует ровно 60 кадров в секунду на любом экране и в любой вкладке
  3. setInterval нельзя задать меньше 100 мс, браузер округлит интервал вверх
  4. rAF вызывается перед отрисовкой кадра в такт экрану и спит в фонеправильный ответ

Разбор

rAF синхронизирован с циклом отрисовки: колбэк выполняется перед кадром, поэтому изменения не рвутся и не делаются дважды за кадр. В фоновой вкладке колбэки не вызываются, что экономит батарею. Выполняется он в главном потоке. setInterval может быть и 16 мс, но не совпадает с кадрами. Частота rAF равна частоте экрана, на 120 Гц это 120 вызовов в секунду.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме