Каков лучший способ инициализации работника службы, используемого для кэширования PWA?
Способ 1:
Я ожидаю, что в этом случае будет установлен новый экземпляр SW. Я полагаю, что в этом нет необходимости, и я хочу повторно активировать существующее ПО, уже запущенное в браузере - я прав?
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('sw.js').then(registration => {
// Registration success
}, function(err) {
// Registration failed
});
});
}
Способ 2: В этом случае я проверяю, что там уже зарегистрировано ПО, и я устанавливаю регистрацию нового, только если оно не зарегистрировано.
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.getRegistrations().then(registrations => {
const isServiceWorkerNotRegistered = registrations.length === 0;
if (isServiceWorkerNotRegistered) {
navigator.serviceWorker.register('sw.js').then(registration => {
// Registration success
}).catch(error => {
// Registration failed
});
} else {
console.log('Service worker already registered.');
}
});
});
}
Кроме того ... Действительно ли необходимо ждать загрузки окна (строка 2)? Поскольку SW работает в браузере асинхронно, я думаю, мне не нужно, чтобы приложение полностью загружалось.