Выбор ответа Middle Web API и воркеры обновлено
requestAnimationFrame против setInterval
Вопрос
Почему для JS-анимации берут requestAnimationFrame, а не setInterval(fn, 16)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: rAF вызывается перед отрисовкой кадра в такт экрану и спит в фоне. rAF синхронизирован с циклом отрисовки: колбэк выполняется перед кадром, поэтому изменения не рвутся и не делаются дважды за кадр.
Варианты ответа
- rAF выполняется в отдельном потоке композитора и не нагружает главный
- rAF гарантирует ровно 60 кадров в секунду на любом экране и в любой вкладке
setIntervalнельзя задать меньше 100 мс, браузер округлит интервал вверх- rAF вызывается перед отрисовкой кадра в такт экрану и спит в фонеправильный ответ
Разбор
rAF синхронизирован с циклом отрисовки: колбэк выполняется перед кадром, поэтому изменения не рвутся и не делаются дважды за кадр. В фоновой вкладке колбэки не вызываются, что экономит батарею. Выполняется он в главном потоке. setInterval может быть и 16 мс, но не совпадает с кадрами. Частота rAF равна частоте экрана, на 120 Гц это 120 вызовов в секунду.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Как данные попадают в воркер через postMessage
Следующий вопрос
Как сделать приложение офлайн