#javascript #таймер
Пишу таймер, который тикает раз в секунду, и должен это делать с точностью до 1/200 секунды. Даже если браузер тупит и комп слабый. Поэтому ориентируюсь не на setTimeout( func, 1000), а на более частые вызовы и системное время в миллисекундах. Вопрос – как тестировать? Надо как-то имитировать разную степень тормознутости системы, чтобы оценить поведение скрипта в разных условиях. И записывать в консоль отклонения в миллисекундах от идеального времени каждого тика. Upd. В этом алгоритме я внутри каждой секунды несколько раз запускаю setTimeout() на время, меньшее 1000, и зависящее от расхождения фактического и ожидаемого времени очередного запуска, и времени оставшегося до «конца» секунды. Гипотеза: тормоза системы не меняются значительно в «окне» одной секунды. Тогда, выполнив несколько коротких (200-500ms) предварительных setTimeout(), можно чуть правильнее предположить лаг следующего, и точнее попасть в нужное время Upd. 2 нашёл интересный совет – тестировать в виртуальной машине, в которой урезать ресурсы.
Ответы
Ответ 1
!function() { var delta = 100; // Интервал будет плюс-минус 100 милисекунд var ost = setTimeout setTimeout = function(f, time) { time += (Math.random() * 2 - 1) * delta ost(f, time) } }() Но, вообще говоря, ваше решение довольно странное. Более частые вызовы приведут лишь к большей загрузки и так тормознутой системы, и не помогут отмерить интервалы точнее. Браузер же "тупит" не просто так - а потому что процессор занят чем-то еще. И если в некоторый момент времени процессор занят - то скрипт проснется невовремя независимо от того, на 20 миллисекунд скрипт засыпал или на 1000.Ответ 2
Возможно вам стоит загрузить систему параллельно дополнительными вычислениями на основе тех же таумаутов. Например что-то вроде этого function noise() { var count = Math.random() * 1000000; // какая-то нагрузка for(var i=0;iОтвет 3
Если на браузере chrome переключиться в режим просмотр кода (инспектор), переходите в режим телефона/планшета и выбираете скорость 50 КВ/s. Тормоза обеспечены. Скриншот с красными стрелками http://prnt.sc/8x4el4
Комментариев нет:
Отправить комментарий