То, что вы описываете, очень похоже на стратегию stale-while-revalidate .
Рецепт basi c в этой кулинарной книге не содержит никакого кода для наличия работник службы уведомляет клиентские страницы, когда шаг повторной проверки находит обновление, однако.
Если бы вы использовали Workbox внутри вашего работника службы, вы могли бы выполнить sh это уведомление шаг, используя workbox-broadcast-update
модуль вместе с несколькими другими модулями:
В вашем сервисном работнике :
import {registerRoute} from 'workbox-routing';
import {StaleWhileRevalidate} from 'workbox-strategies';
import {BroadcastUpdatePlugin} from 'workbox-broadcast-update';
registerRoute(
// Adjust this to match your cached data requests:
new RegExp('/api/'),
new StaleWhileRevalidate({
plugins: [
new BroadcastUpdatePlugin(),
],
})
);
В ваше веб-приложение :
navigator.serviceWorker.addEventListener('message', async (event) => {
// Optional: ensure the message came from workbox-broadcast-update
if (event.data.meta === 'workbox-broadcast-update') {
const {cacheName, updatedUrl} = event.data.payload;
// Do something with cacheName and updatedUrl.
// For example, get the cached content and update
// the content on the page.
const cache = await caches.open(cacheName);
const updatedResponse = await cache.match(updatedUrl);
const updatedText = await updatedResponse.text();
}
});