2016-08-10 4 views
0

Я устанавливаю таймер в Node.js, который ждет 3 часа, чтобы испустить событие, как только это время будет достигнуто, оно выдает событие всем прослушиваемым браузерам.Насколько точным является setTimeout/setInterval в Node.js и в браузере?

Браузеры собирают информацию о том, что такое событие до этого происходит, а затем вычисляет время, оставшееся до следующего обратного отсчета, и ожидая, что, когда часы достигнут 0, событие будет запущено.

Таким образом, вы используете setTimeout (Node.js), а другой использует setInterval (браузер) подсчет в секунду (обратный отсчет времени).

Могу ли я быть уверенным, что?

  • К тому времени, когда обратный отсчет достигнет 0, событие будет запущено с диапазоном ошибок от 1 до 2 секунд. (Браузер).
  • То, что Node.js setTimeout достаточно точен, чтобы называться с диапазоном ошибок менее 1 секунды.

Я читал о том, что таймеры составляют от 500 мс до 1000 мс, что является прекрасным для моих нужд, но я никогда не слышал, чтобы они использовались в течение этого времени, как я хочу.

Насколько они точны или я должен использовать другое решение? особенно на стороне Node.js, которая должна быть наиболее точной из всех.

  • Альтернативы сделать интервал в Node.js, который работает около 4 раз в секунду, вычисляет дату миллисекунду, и проверяет, есть ли событие, которые ему нужно вызывать из списка событий.
  • В браузере устанавливается интервал так, чтобы он вычислял дату ms с каждым обратным вызовом, чтобы попытаться сохранить синхронизированное время.

ответ

1

Точность таймера будет зависеть от того, как «занят» цикл событий во время таймаута.

Это должно быть достаточно, если вы хотите что-то вроде:

setTimeout(done, THREE_HOURS_IN_MS); 

Если цикл обработки событий блокировки в течение длительного времени у вас есть другие проблемы.

Но если вы отбираете четыре раза в секунду как часть обратного отсчета, тогда я ожидаю, что произойдет большая неточность.

Таким образом, вам может потребоваться разделить два вида деятельности (выборка и обратный отсчет) или сохранить истекшее время вручную.

Обратите внимание, что когда ваше веб-приложение не имеет фокуса, точность таймеров ухудшается.

Смежные вопросы