Javascript setInterval "догоняет" после того, как страница свернута / удалена - PullRequest
2 голосов
/ 29 июня 2011

У меня довольно обычный setInterval звонок (я думаю):

var myInterval = setInterval("myFunction('passVar1', 'passedVar2')", 8000);

Он отлично работает, если я на странице, но если я оставлю страницу открытой на некоторое время (или сверну ее)?), когда я возвращаюсь, это похоже на то, что он просто собирает все вызовы myFunction в очередь и пытается очень быстро их пропустить, чтобы «наверстать упущенное».Затем, когда он восстанавливается, он снова работает с интервалом в 8 секунд, как и должно быть.

Я что-то не так делаю?Сейчас я использую Firefox 5 - если это как-то связано с этим.Мысли?ТИА.

Ответы [ 2 ]

6 голосов
/ 29 июня 2011

Во-первых, исправьте ваш setInterval, чтобы он не использовал eval:

var myInterval = setInterval(function(){
                     myFunction('passVar1', 'passedVar2')
                 }, 8000);

Во-вторых, от браузера зависит, что интервал делает или не делает.


ОБНОВЛЕНИЕ:

Основываясь на комментариях ниже и обсуждении чата здесь, мы используем скрипту, используя setTimeout:
http://jsfiddle.net/maniator/VR7WE/


ОБНОВЛЕНИЕ:

Основываясь на дальнейшем обсуждении, выясняется, что это была проблема с анимацией jquery

Следующая скрипта запускает тайм-аут только после завершения анимации: http://jsfiddle.net/maniator/c869Z/5/

1 голос
/ 29 июня 2011

Вы можете управлять своим собственным механизмом интервалов с помощью setTimeout (), и это позволит вашему коду адаптироваться к реальному поведению браузера.Вы, вероятно, сделаете что-нибудь, чтобы отследить «целевое» время, и если вы пропустите цель, следующий таймаут будет соответственно меньше, чем номинальная задержка.Таким образом, даже если ваша номинальная задержка составляла 100 мс, а браузер давал вам контроль каждые 1000 мс, у вас был бы только один ожидающий тайм-аут в любой момент.Когда фокус вернется, ваш код заметит, что все возвращается в нормальное русло, и автоматически возобновит высокочастотную активность.

...