Избежать сервисного работника для совместной работы UX? - PullRequest
0 голосов
/ 16 декабря 2018

У нас есть Прогрессивное веб-приложение, которое использует 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?Или это типично, прирост производительности слишком велик, и мы сами идем по правильному пути, разыгрывая версии сами?

...