Всем привет. Проходил тестовое задание для вакансии. Сделал секундомеры, но мне отказали с причиной, что setInterval и setTimeout не совсем точные в своём измерении. Типо код будет происходить не каждую заданную единицу. Так вот вопрос. Какая альтернатива лучше? У меня есть мысли как то с date поиграться, но буду рад увидеть Ваши советы. И вообще есть ли ресурс, видео и т.д, где описаны все эти минусы JS? Вот я ещё знаю что Math.random никогда не зарандомит 1 и вот такие моменты
Возможно имели в виду холд setInterval и setTimeout в деактивной вкладке браузера. В таком случае нужно фиксировать начальное время отсчета и на основании его уже юзать setInterval или setTimeout
Одинаково. Время задержки указанное в setInterval/setTimeout - это минимальное время через которое браузер запустит колбек. Но он может сделать это и сильно позже. https://learn.javascript.ru/settimeout-setinterval
Вообще конечно для точного секундомера `setInterval` и `setTimeout` не подходят. Их особенность в том что они ставят свой вызов через интервал и вклиниваются в стек выполнения между другими событиями браузера. По началу это дает какую-то минимальную погрешность (вроде 1мс), но со временем ошибки накапливаются.
Поэтому при работе с временем нужно это самое время и использовать. Например вызывать интервал очень часто, и на каждый вызов сравнивать запомненную в переменной дату с новой датой. Как только прошла секунда - обновлять таймер.
Например вызывать интервал очень часто, и на каждый вызов сравнивать запомненную в переменной дату с новой датой. Как только прошла секунда - обновлять таймер.
Зачем, если можно тупо поставить таймаут на оставшееся до следующей секунды время?