Показать сообщение отдельно
  #3 (permalink)  
Старый 16.07.2014, 08:14
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Таймер, установленный по setInterval (и по setTimeout тоже), неточен, а при переключении на иную вкладку некоторые браузеры так и вовсе его затормаживают. Вот демонстрация с учебника местного:
<div id="timer-interval-log"></div>
<p><button onclick="timerIntervalLog()">Запустить повтор с интервалом в 90 мс</button><br /><button onclick="clearInterval(timerIntervalLogTimer)">Остановить повтор</button></p>
<script>
var timerIntervalLogTimer;
function timerIntervalLog() {
  var arr = [];
  var d = new Date;
  timerIntervalLogTimer = setInterval(function() {
    var diff = new Date - d;
    if (diff > 100) diff = '<span style="color:red">'+diff+'</span>';
    arr.push( diff );
    if (arr.length > 25) arr.shift();
    document.getElementById('timer-interval-log').innerHTML = arr;
    d = new Date;
  }, 90);
}
</script>

То есть, надо либо проводить калибровку каждую определенную итерацию и при переключении пользователя на страницу (window.onfocus), либо тикать таймер на сервере, и через long-polling подавать сигнал странице, что уже пора чо там делать.
Ответить с цитированием