Таймеры
Вопрос
Насколько точен setTimeout и чем он отличается от setInterval?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
задержка - это минимум, а не гарантия
вложенные таймеры после пятого уровня зажимаются до 4 мс
в фоновой вкладке таймеры тормозят до секунды и реже
setInterval не ждёт завершения колбэка - вызовы накапливаются
надёжнее рекурсивный setTimeout с перезапуском в конце работы
для анимации - requestAnimationFrame, он синхронизирован с кадром
Что могут спросить следом
- Как сделать точный таймер обратного отсчёта
- Почему анимация на setInterval дёргается
- Что будет с таймером при переходе вкладки в фон
Разбор
setTimeout(fn, 100) означает «не раньше чем через 100 мс»: колбэк встанет в очередь
макрозадач, а выполнится, когда стек освободится. Спецификация зажимает вложенные таймеры
до 4 мс после пятого уровня, а в неактивной вкладке браузер замедляет их до секунды.
setInterval ставит вызовы по расписанию независимо от того, успел ли предыдущий: если
колбэк медленнее интервала, вызовы накопятся. Безопаснее рекурсивный setTimeout, который
планирует следующий запуск после завершения работы.
Для анимации ни то ни другое: requestAnimationFrame привязан к кадру и сам замирает
в фоне.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Порядок микро- и макрозадач
Следующий вопрос
requestAnimationFrame против setInterval