@SherbakovFirst

Что точнее setInterval и setTimeout?

Всем привет. Проходил тестовое задание для вакансии. Сделал секундомеры, но мне отказали с причиной, что setInterval и setTimeout не совсем точные в своём измерении. Типо код будет происходить не каждую заданную единицу. Так вот вопрос. Какая альтернатива лучше? У меня есть мысли как то с date поиграться, но буду рад увидеть Ваши советы. И вообще есть ли ресурс, видео и т.д, где описаны все эти минусы JS? Вот я ещё знаю что Math.random никогда не зарандомит 1 и вот такие моменты
  • Вопрос задан
  • 146 просмотров
Пригласить эксперта
Ответы на вопрос 3
RAX7
@RAX7
Что точнее setInterval и setTimeout?

Одинаково. Время задержки указанное в setInterval/setTimeout - это минимальное время через которое браузер запустит колбек. Но он может сделать это и сильно позже. https://learn.javascript.ru/settimeout-setinterval
Какая альтернатива лучше?

Date.now либо performance.now. Можно еще с помощью requestAnimationFrame сделать секундомер.
Ответ написан
Комментировать
IonDen
@IonDen
JavaScript developer. IonDen.com
Вообще конечно для точного секундомера `setInterval` и `setTimeout` не подходят. Их особенность в том что они ставят свой вызов через интервал и вклиниваются в стек выполнения между другими событиями браузера. По началу это дает какую-то минимальную погрешность (вроде 1мс), но со временем ошибки накапливаются.

Поэтому при работе с временем нужно это самое время и использовать. Например вызывать интервал очень часто, и на каждый вызов сравнивать запомненную в переменной дату с новой датой. Как только прошла секунда - обновлять таймер.
Ответ написан
Fragster
@Fragster
помогло? отметь решением!
https://learn.javascript.ru/settimeout-setinterval
тут с картинками. Для задержки между стартами - setInterval предпочтительнее. Для фиксированной паузы между вызовами - вложенный setTimeout.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы