Убедитесь, что повторные вызовы для извлечения не останавливаются, когда пользователь не взаимодействует с вкладкой?

Я взломал (IOT) устройство IOT, которое доступно в моей домашней сети на 192.168.1.1 (например).

Он предоставляет конечную точку HTTP (notify.txt) это дает мне статус системы.

Я играл и тоже служил (notify.html а также notify.js) который проверяет статус (notify.txt) примерно каждые 1-2 секунды, и создает уведомление, если есть какие-либо новые данные.

Однако, если я работаю над другими вещами в браузере (в настоящее время Chrome), в конечном итоге эти запросы перестают выполняться со скоростью примерно 1-2 в секунду.

Ниже вы можете увидеть, когда процесс начинает замедляться. Я могу заставить процесс "ускориться" снова, вернувшись к вкладке и открыв инструменты разработчика. (Я в настоящее время испытываю это на рабочем столе).

2019:19:14:50
2019:19:14:51
2019:19:14:52
2019:19:14:53
2019:19:14:54
2019:19:14:56
2019:19:14:58
2019:19:15:00
2019:19:15:02
2019:19:15:04
2019:19:15:06
2019:19:15:16
2019:19:15:28
2019:19:15:40
2019:19:15:54
2019:19:16:10

Можно ли что-нибудь сделать, чтобы изменить "фон" этих вкладок и убедиться, что они продолжают отправлять запросы, на которые я их хочу? (Моя терминология может быть плохой, так как я не совсем знаком с web dev / javascript, просто играю в соответствии с моими потребностями.)

В настоящее время мой код (примерно) выглядит следующим образом: checkUpdate работает под нагрузкой.

var lastText = undefined;
function checkUpdate() {
  fetch("notify.txt")
    .then(function(response) {
      if (response.status === 200) {
        return response.text()
      } else {
        console.log("Fetch error!");
        return Promise.resolve(lastText);
      }
    })
    .then(function(responseText) {
      // No update. Check again in one second.
      if (responseText === lastText) {
        setTimeout(checkUpdate, 1000);
        return;
      }

      let shouldTryNotify = true;
      if (lastText !== undefined) {
        lastText = responseText;
      } else {
        shouldTryNotify = false;
        lastText = responseText.slice();
        responseText = "Notifications will go here. :)";
      }

      if (shouldTryNotify) {
        // empty.js is an empty file.
        navigator.serviceWorker.register("empty.js");
        Notification.requestPermission(function(result) {
          if (result === "granted") {
            navigator.serviceWorker.ready.then(function(registration) {
              registration.showNotification(responseText);
            });
          }
        });
      }
      setTimeout(checkUpdate, 1000);
    })
    .catch(function() {
      console.log("Error!");
      setTimeout(checkUpdate, 1000);
    });
}

0 ответов

Другие вопросы по тегам