У нас есть Прогрессивное веб-приложение, которое использует Service Worker, где UX - это взаимодействие между хостом и гостем в режиме реального времени.Мы регулярно отправляем обновления, и иногда возникают проблемы, когда хосты и гости имеют разные версии приложения, кэшированные в Service Worker.Нам нравится то, что нам не нужно обрабатывать каждый запрос к серверу в обоих направлениях, но нам интересно, следует ли нам прекратить использовать его, чтобы гарантировать, что все наши Хосты и их Гости используют одну и ту же / последнюю версию?Справочная информация ниже
Мы выставляем isUpdateAvailable
обещание.
this.isUpdateAvailable = new Promise((resolve, reject) => {
if('serviceWorker' in navigator) {
navigator.serviceWorker.register('service-worker.js').then(reg => {
reg.onupdatefound = () => {
const installingWorker = reg.installing;
installingWorker.onstatechange = () => {
if(installingWorker.state === 'installed') {
if(navigator.serviceWorker.controller) {
// update available
resolve(true);
} else {
// no update
resolve(false);
}
} else {
// no update
resolve(false);
}
};
};
}).catch(err => { reject(err); });
}
});
На ready
, мы проверяем наличие обновлений
this.isUpdateAvailable.then(isAvailable => {
if(isAvailable) {
this.update();
}
});
Сначала update()
Метод следовал подходу Google Inbox: отображать постоянное сообщение с тостами, информирующее об обновлении, включая кнопку «Обновить», которая обновлялась при нажатии.Мы нашли хороший процент наших хостов, и гости не удосужились нажать на него.Поэтому мы бросили тост и позвонили window.location.reload(true)
, как только появилось обновление.Это помогло, но у нас были некоторые хозяева / гости, которые застряли с сервисным работником, который необходимо вручную остановить, чтобы получить последнюю версию.
Кроме того, недавно мы начали отправлять обновления с жестко запрограммированным клиентом.номер версии и добавил последнюю версию в нашу базу данных, чтобы проверить их в попытке принудительно зарегистрировать обновление.
Мы должны гарантировать, что наши Хозяева и их Гости используют ту же версию нашего PWA.Кажется, что излишне самим делать разные версии и загружать их прямо с сервера проще.Должны ли мы прекратить использование Service Worker?Или это типично, прирост производительности слишком велик, и мы сами идем по правильному пути, разыгрывая версии сами?