У меня есть приложение, которое вычисляет множественные различия между 2 и 2 точками времени в течение всего дня.Я использую таймер обратного отсчета, чтобы показать разницу между этими двумя точками.Всякий раз, когда обратный отсчет достигает 00.00.00, приложение запускается с обратным отсчетом следующего вычисления между 2 точками времени.
Поэтому мне нужен таймер обратного отсчета, который работает постоянно, даже если вкладка неактивна.Я обнаружил, что когда текущая вкладка неактивна, setTimeout будет иметь небольшую задержку
Это то, что у меня до сих пор.Я реализовал WebWorker, но кажется, что при переключении вкладок задержка все равно есть.Я регистрирую таймер каждую секунду, поэтому я проверил его, открыв консоль в отдельном окне и переключая вкладки.
Это то, что у меня есть
import worker from './worker.js';
import WebWorker from './WebWorker';
const useSetInterval = ({ prayerTime }) => {
// SET THE STATE OF SECONDS, MINUTES AND HOURS
const [seconds, setSeconds] = useState(60 - Number(moment().format('ss')));
const [minutes, setMinutes] = useState(prayerTime.minutes);
const [hours, setHours] = useState(prayerTime.hours);
useEffect(() => {
const w = new WebWorker(worker);
w.postMessage({ seconds, minutes, hours });
w.addEventListener('message', e => {
const { newSeconds, newMinutes, newHours } = e.data;
setSeconds((newSeconds < 0) ? 59 : newSeconds);
if (newSeconds < 0)
{
setMinutes((newMinutes < 0) ? 59 : newMinutes);
if (newMinutes < 0) setHours((newHours < 0) ? "Refresh" : newHours);
}
});
return () => w.terminate();
}, [seconds, minutes, hours]);
return { seconds, minutes, hours };
};
// Webworker.js
export default class WebWorker {
constructor(worker) {
const code = worker.toString();
const blob = new Blob(['('+code+')()']);
return new Worker(URL.createObjectURL(blob));
}
}
// worker.js
export default () => {
self.addEventListener( "message", (e) => {
if (!e) return;
const { seconds, minutes, hours } = e.data;
setTimeout(() => {
const newSeconds = seconds - 1;
const newMinutes = (newSeconds < 0) ? minutes - 1 : minutes;
const newHours = (newMinutes < 0) ? hours - 1 : hours;
postMessage({ newSeconds, newMinutes, newHours });
}, 1000);
});
};
У меня установлен тайм-аут в1000 мс, что составляет 1 секунду, и я прочитал, когда вкладка неактивна, таймер задерживается до 1000 мс, но все еще есть задержка.Кто-нибудь может помочь мне в правильном направлении?