2015-12-09 1 views
0

У меня есть простой таймер, который я построил, который работает с функцией 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. Как я могу предотвратить это, чтобы не замедлить работу веб-рабочего?

ответ

0

Есть ли какая-то конкретная причина, по которой вы используете setInterval? Вероятно, причина, по которой Safari замедляется при размывании, заключается в том, чтобы не допустить, чтобы вкладки теряли процессорные циклы, когда пользователь не обращает на них внимания. Что может быть настолько важно в вашем коде, что его нужно обновлять каждую секунду, даже если пользователь не фокусируется на нем?

Во всяком случае, вы можете слушать onblur и onfocus, чтобы приостановить или перезапустить таймер при необходимости. Если вам нужно сохранить идеальный хронометраж для какой-либо другой цели, всегда есть Date.now().

+0

Я создаю веб-приложение таймера, поэтому точное сохранение времени является важным. Его нужно запускать каждую секунду, чтобы время оставалось правильным, даже если вкладка не сфокусирована, учитывая, что многие люди будут использовать веб-приложение для работы в браузере, а нецеленая вкладка будет довольно распространенным вариантом использования. –

+0

Тогда, как я уже сказал, используйте 'onblur' и' onfocus' для отслеживания, когда вам нужно обновить время для входа пользователя в/из вкладки. Вы должны использовать системное время как абсолютную опорную точку для синхронизации в любом случае, если вы используете только 'setInterval', то это уже дико неточно. – jered

+0

http://jsfiddle.net/_jered/j3m5pkgb/ – jered

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