В чём разница между анимацией на requestAnimationFrame и SetInterval?

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

Чем отличается анимация на requestAnimationFrame от setInterval

  • область: веб-анимация, таймеры
  • requestAnimationFrame — это браузерный API, предназначенный для создания анимаций
  • Его вызовы синхронизируются с обновлением кадра, которое обычно происходит с частотой 60 fps
  • В свёрнутой вкладке браузер автоматически подавляет такие вызовы, что позволяет экономить ресурсы
  • setInterval обеспечивает регулярное выполнение функции через заданный интервал, но не учитывает момент перерисовки кадра
  • Если период setInterval не совпадает с частотой обновления экрана, анимация может начать дрожать или заикаться
  • Для анимаций requestAnimationFrame обеспечивает плавность и более рациональное использование энергии

Итого: для качественной анимации предпочтителен requestAnimationFrame, поскольку браузер синхронизирует его работу с перерисовкой и дополнительно оптимизирует выполнение.

Подробный ответ

Основной ответ

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

Ключевые моменты

  • Синхронизация с рендером: requestAnimationFrame запускает callback ориентировочно перед следующей перерисовкой экрана — примерно с частотой ~60 FPS на большинстве мониторов. Это уменьшает мерцание и джиттер. SetInterval работает строго по таймеру, поэтому его вызовы могут «рассинхронизироваться» с частотой обновления дисплея, из-за чего анимация начинает дергаться.
  • Оптимизация ресурсов: когда вкладка становится неактивной или окно сворачивается, requestAnimationFrame автоматически приостанавливается, снижая нагрузку на CPU и расход энергии. SetInterval обычно продолжает выполняться и может потреблять ресурсы без практической пользы.
  • Гибкость и точность: callback requestAnimationFrame получает временную метку (timestamp), которую можно использовать для точного вычисления прогресса анимации. При работе с setInterval время приходится контролировать вручную, поэтому такой подход сложнее и менее надежен.

Практический контекст

В React 18+ и современных SPA requestAnimationFrame считается стандартным решением для UI-анимаций, например кастомных переходов и анимации canvas. SetInterval иногда используют для задач с фиксированной периодичностью, которые не связаны с визуальным обновлением, — например, для таймеров или опроса данных, но не для плавной анимации.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку