Лучшая практика для поддержания таймера в PWA - PullRequest
1 голос
/ 05 октября 2019

Я создаю прогрессивное веб-приложение с использованием React, концепция которого вращается вокруг поддержания таймера в рабочем состоянии.

Для контекста, приложение предназначено для домашних пивоваров, чтобы отслеживать, когда хмель и другие добавки необходимо добавлять в варку во время варки. Дополнения добавляются с определенным количеством времени, оставшегося в кипении, то есть 1 унция хмеля Citra за 20 минут до конца.

Я использую JavaScript setInterval, чтобы «отметить» таймер, которыйelapsedSeconds свойство состояния, которое управляет остальной частью приложения.

Проблема, с которой я сталкиваюсь, заключается в том, что таймер перестает тикать. Если я разрешу запускать приложение, экран в конечном итоге заблокируется, или я переключу приложения и т. Д. Работник службы продолжит работу, и таймер продолжит работать в течение короткого времени (около 10 минут, как я могу сказать)в тестировании?)

Я думаю, что я буду хранить время эпохи в состоянии, которое представляет время, когда таймер запустился. Таким образом, когда пользователь «возвращается» в PWA, я могу сравнить текущее время эпохи с сохраненным startingEpochTime, чтобы получить обратно elapsedSeconds. Но я не хочу делать это сравнение на каждом «тике», если мне не нужно. В идеале это сравнение должно выполняться только тогда, когда пользователь возвращается в приложение из какого-то другого контекста, после того, как работник сервиса уже прекратил обработку.

Мне нужен правильный способ сделать это. Будет ли window.onload работать в этом случае? Если я переключаю приложения на другое приложение в течение 20 минут, а затем снова переключаюсь на приложение таймера, этот метод запускается снова? В поисках лучшей практики для такого сценария или любой идеи, которая может мне помочь.

1 Ответ

0 голосов
/ 07 октября 2019

Вот пара указателей, которые могут помочь:

Общее решение, которое вы описываете, это Wake Lock API , который представляет собой процесс разработки и определения, но непо умолчанию доступен (пока).

С точки зрения того, что в настоящее время реализовано, есть довольно надежные способы, по крайней мере, определить, когда ваше веб-приложение переходит в фоновый режим и возвращается на передний план, используя страницу . API жизненного цикла событий. Как только вы надежно определите, когда вернулись на передний план, метод, подобный тому, что упоминается в комментариях о сравнении времени начала с текущим временем, звучит правдоподобно.

...