У меня есть простой таймер, который я построил, который работает с функцией setInterval. Каждые 1 секунду он увеличивает значение таймера на 1. Когда я нажимаю на вкладке на другую вкладку в Safari, она замедляется. Вы можете увидеть, что я говорю об этом в основном CodePen:Простой setInterval тайм-тайм на размытии вкладки в Safari
http://codepen.io/anon/pen/rxVMRp
Это основной JS код:
function setTimer(){
var curTime = parseInt($('.timer').text());
var newTime = curTime+1;
$('.timer').text(newTime);
}
setInterval(setTimer, 1000);
Конечно, мой таймер немного более продвинутым, но вы можете в этом базовом примере все еще видят эффект замедления setInterval в Safari. Как я могу предотвратить это, чтобы не замедлить работу веб-рабочего?
Я создаю веб-приложение таймера, поэтому точное сохранение времени является важным. Его нужно запускать каждую секунду, чтобы время оставалось правильным, даже если вкладка не сфокусирована, учитывая, что многие люди будут использовать веб-приложение для работы в браузере, а нецеленая вкладка будет довольно распространенным вариантом использования. –
Тогда, как я уже сказал, используйте 'onblur' и' onfocus' для отслеживания, когда вам нужно обновить время для входа пользователя в/из вкладки. Вы должны использовать системное время как абсолютную опорную точку для синхронизации в любом случае, если вы используете только 'setInterval', то это уже дико неточно. – jered
http://jsfiddle.net/_jered/j3m5pkgb/ – jered