Показать сообщение отдельно
  #4 (permalink)  
Старый 13.11.2012, 01:18
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Товарищи, я усомнился в том, что Гугл мог сделать такую гадость. В первую очередь потому, что тогда погибли бы все ajax-веб-приложения, которые периодически по setTimeout/setInterval обращаются к серверам. Перестал бы в частности работать мой проект, но главное перестала работать бы сама гугловская почта (gmail).
В интернете одни говорят, что в скрытой закладке Google Chrome останавливает работу setTimeout/setInterval, другие говорят, что такого не может быть!
Поэтому я провел детальное исследование этого вопроса. Правы и первые, и вторые.
Не могу толком объяснить результаты, но заявляю следующее:
1. Google Chrome не останавливает работу setTimeout/setInterval, а сильно ЗАМЕДЛЯЕТ.
2. Степень замедления как ни странно зависит от самого интервала!

В вышеописанном примере если вы подольше подождете, то увидите, что "звездочка" всё же доехала до конца. На практике у меня получилось, что резкое замедление работы setTimeout наступает при интервале 100-150 миллисекунд. При интервале 1 сек. в закрытой закладке всё работает нормально, как ему и положено.
Как вы знаете, закладки Google Chrome - это отдельные windows-процессы. Так может виноват вовсе и не Гугл, а windows, которая квантует время процессора для закрытых закладок (уменьшает)?
Но почему тогда в Fire Fox тот же эффект? Посмотреть работу Хрома в других ОС не имею возможности.
Таким образом, быструю анимацию (100 ms) сделать не удастся. Но фоновые задачи, запускаемые с интервалом от 1000 ms работать будут.

P.S. пример от Skipp - это обманка, т.к. при скрытой закладке полезная функция не работает (не пересчитывает регулярно координату), а пересчитывает конечную координату только в момент активизации закладки.
Ответить с цитированием