Я новичок, и задался проблемой написать таймер pomodoro с помощью js. Реализовал это с помощью setTimeout. Ниже кусок кода, который обеспечиват работу непосредственно таймера
function timer(){
var dataBefore = new Date().getTime();
if (timeNow > 0 && start === true){
timeNow-=100;
$('#time').html(convertForUser(timeNow));
if (timeNow <= 0){
counter+=1;
if (counter % 2 === 1){
timeNow = timeRest;
$("#site-ico").attr("href", "/green.ico")
$('.logo').html('<img src="/logo_rest.png" alt="logo"></img>');
}
else{
timeNow = time;
$("#site-ico").attr("href", "/red.ico")
$('.logo').html('<img src="/logo_work.png" alt="logo"></img>');
}
}
var diff = (new Date().getTime() - dataBefore);
}
else{
return;
}
setTimeout(timer,(100-(diff*10)));
}
И все вроде адекватно работет, однако при потере фокуса, если во время работы приложения переключиться на другую вкладку, выполнение кода прекращается, таймер перестает работать. Как можно решить данную проблему?
в общем суть в том, что браузер понижает или приостанавливает активность в неактивных вкладках, для решения такой проблемы используют Web Workers которые работают в отдельном от UI потоке.
Конкретно для вашей задачи есть готовая библиотека https://www.npmjs.com/package/worker-timers
Виртуальный выделенный сервер (VDS) становится отличным выбором