Задать вопрос

Как сохранять данные и проверять через определенное время?

Всем привет. В общем я задавал подобный вопрос, но по началу все работало нормально, но потом появились услвоия и данные стали криво переносится в архив.

Есть страница с данными, я через document.query..... собираю данные в переменные и сразу же сохраняю в localStorage
let a;
let olda;
let b;
let oldb;
let c;
let oldc;

//чтение данных из архива для отображения в таблице
localStorage.getItem('olda' );
localStorage.getItem('oldb' );
localStorage.getItem('oldc' );


localStorage.setItem('a', aa);
localStorage.setItem('b', bb);
localStorage.setItem('c', cc);

localStorage.setItem('arhTime', new Date().getTime())
.

Так же я беру метку текущего времени
let now_time = new Date();
	hour_new = now_time.getHours();
	minute_new = now_time.getMinutes();


Перед выполнением основного кода, читаю в переменную
let arhive_savetime = localStorage.getItem('arhTime');

И далее выполняю код:
if (new Date().getTime() - arhive_savetime >= 5 * 60 * 1000){
olda = a;
localStorage.setItem('olda', olda );
oldb = b;
localStorage.setItem('oldb', oldb );
oldc = c;
localStorage.setItem('oldc', oldc );
}


Идея плагина простая на самом деле, но вот с реализацией все равно проблемы.
Есть некая таблица, при обновления страницы в ней изменяются постоянно данные. Я пытаюсь сделать тренд данных, т.е. хранить значения таблицы 5-10 (для этого в настройках указываю время) минут назад и новые. Но реализация выше не работает, т.к. в arhive_savetime заносится текущее время и данное условие срабатывает new Date().getTime() - arhive_savetime >= 5 * 60 * 1000 после каждой перезагрузки страницы. Как реализовать задуманное? Подскажите как правильно задать условие? Весь код не прошу писать, просто хоть подтолкнуть. Единственное, что setIneterval не проходит, т.к. он не работает с закрытым браузером - собственно по этой причине и использую localStorage. Спасибо
  • Вопрос задан
  • 85 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
i229194964
@i229194964
Веб разработчик
Попробуйте так

// Читаем данные из localStorage
let olda = localStorage.getItem('olda');
let oldb = localStorage.getItem('oldb');
let oldc = localStorage.getItem('oldc');
let oldDataTime = localStorage.getItem('oldDataTime');

// Получаем текущее время
let currentTime = new Date().getTime();

// Если прошло более 5 минут с момента последнего сохранения, сохраняем текущие значения и обновляем время
if (!oldDataTime || currentTime - oldDataTime >= 5 * 60 * 1000) {
  localStorage.setItem('olda', a);
  localStorage.setItem('oldb', b);
  localStorage.setItem('oldc', c);
  localStorage.setItem('oldDataTime', currentTime);
}

// Выводим значения в таблицу
// ...
Ответ написан
zkrvndm
@zkrvndm
Архитектор решений
Я бы сам как сделал. Если таблица обновляется динамически, то просто использовать MutationObserver для парсинга - при изменениях данные автоматом будут заносится в память или куда вам там надо.

P. S. Чтобы страница не замораживалась браузером, разместить на ней mp3 трек с тишиной и запустить в бесконечном цикле. Страницы, где есть активное медиа не подвержены заморозке.

P. S. S. А вообще, такие задачи имеет смысл делать не в браузере, а вынести на сервер и повесить на CRON.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы