2013-10-11 2 views
2

Я использую setTimeout для запуска программы JavaScript, которая будет использовать AJAX для извлечения внешних данных и обновления содержимого страницы один раз каждые 1000 миллисекунд или одну секунду.Почему JavaScript setTimeout отстает на другой вкладке?

Это прекрасно работает, когда вкладка, на которой находится моя веб-страница, находится на переднем крае. Однако, если страница запущена в окне браузера с несколькими вкладками, а пользователь сейчас не находится на этой вкладке, то setTimeout начнет отставать (за одну минуту, вместо того, чтобы обновлять 60 раз, он обновляется всего около 30).

Однако, если веб-страница находится в авангарде окна браузера, находящегося в фоновом режиме, то setTimeout будет продолжать работать с правильной скоростью.

Может кто-нибудь объяснить, почему это происходит, и какие-либо способы решить это?

+0

Это может предоставить ответ для вас: https://developer.mozilla.org/en/docs/Web/API/window.setTimeout#Minimum.2F_maximum_delay_and_timeout_nesting – jeff

ответ

3

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

+0

Есть ли какой-нибудь способ этого? Я смотрел на таймер JavaScript на другом веб-сайте (progamingleague.com), и даже когда я переключал вкладки, их таймер продолжал работать точно. Какие у меня альтернативы? – Charles

+0

Это не под программным контролем. Это то, что делают современные браузеры. Лучшее, что вы можете сделать, это проверить часы и посмотреть, как работает ваш таймер, и как он думает, что он работает. – Pointy

+0

Что именно вы подразумеваете под «проверкой часов и просмотром того, как работает ваш таймер, и как он думает, что он работает». Это как-то связано с записью системного времени в начале, а затем подсчет количества интервалов в 1000 мс каждый и сравнение с фактическим системным временем? – Charles

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