Offline-страница в контексте сервис-воркеров выполняет функцию резервного контента, который отображается пользователю при отсутствии сетевого подключения или недоступности запрашиваемого ресурса. Основная цель — сохранить навигацию и пользовательский опыт, даже когда сервер не отвечает.
Для этого Sw-precache предоставляет возможность указать страницу fallback, которая будет использоваться для всех навигационных запросов.
В Sw-precache это реализуется через опцию
navigateFallback. Пример конфигурации:
module.exports = {
staticFileGlobs: [
'dist/**.html',
'dist/**.js',
'dist/**.css',
'dist/images/*.*'
],
stripPrefix: 'dist/',
navigateFallback: '/offline.html',
runtimeCaching: [{
urlPattern: /\/api\//,
handler: 'networkFirst'
}]
};
Ключевые моменты:
navigateFallback: '/offline.html' указывает путь к
странице, которая будет показываться при навигационных запросах, если
сеть недоступна.staticFileGlobs.Sw-precache обрабатывает статические файлы и динамические запросы отдельно:
Если навигационный запрос не попадает под кешированные статические
файлы, сервис-воркер автоматически возвращает страницу, указанную в
navigateFallback.
Пример минимальной offline-страницы:
Нет подключения
navigateFallbackWhitelist для указания
URL-паттернов, на которые распространяется fallback.Пример использования whitelist:
navigateFallback: '/offline.html',
navigateFallbackWhitelist: [/^\/app\//]
Только запросы, начинающиеся с /app/, будут
перенаправлены на offline-страницу, остальные — обрабатываются как
обычно.
Для полноценного оффлайн-режима рекомендуется комбинировать navigateFallback с стратегиями кеширования динамических данных:
runtimeCaching: [
{
urlPattern: /\/api\//,
handler: 'networkFirst'
},
{
urlPattern: /\/images\//,
handler: 'cacheFirst'
}
]
networkFirst — сначала пробует сеть, затем кеш.cacheFirst — сначала использует кеш, сеть только если
нет данных. Эта комбинация позволяет offline-странице отображаться
корректно, а динамические данные обновляться при доступе к сети.