Network Only — это стратегия кэширования в библиотеке
Workbox, которая ориентирована на прямое обращение к сети без
использования кэша. Эта стратегия гарантирует, что клиент всегда
получает актуальные данные с сервера, что особенно важно для
динамического контента, где устаревшая информация может привести к
ошибкам или некорректной работе приложения.
Network Only от стратегий
вроде Cache First или
Stale While Revalidate.try/catch или через методы Workbox.Для использования Network Only подключается модуль
workbox-strategies и создаётся экземпляр стратегии:
import { registerRoute } from 'workbox-routing';
import { NetworkOnly } from 'workbox-strategies';
registerRoute(
({ request }) => request.destination === 'script',
new NetworkOnly()
);
Пояснение к коду:
registerRoute позволяет определить правило перехвата
запросов.{ request } => request.destination === 'script'
ограничивает стратегию только для JavaScript-файлов.new NetworkOnly() создаёт стратегию, которая не
использует кэш и всегда обращается к сети.Network Only может принимать объект с настройками, хотя
их меньше, чем у кэширующих стратегий. Основные параметры:
fetch. Например, можно указать метод
запроса, заголовки, режим и credentials:new NetworkOnly({
fetchOptions: {
credentials: 'include',
cache: 'no-store',
mode: 'cors'
}
});
plugins — массив плагинов Workbox, которые могут обрабатывать события запроса и ответа. Примеры плагинов:
workbox-expiration — обычно используется с
кэшированием, но можно применять для логирования.workbox-cacheable-response — позволяет фильтровать
кэшируемые ответы, но в Network Only используется
редко.Network Only подходит для случаев, когда данные:
Примеры:
registerRoute(
({ url }) => url.pathname.startsWith('/api/'),
new NetworkOnly()
);
Запросы к /login и /logout лучше
обрабатывать стратегией Network Only, чтобы гарантировать
актуальность данных и предотвращение возможного использования устаревших
токенов.
Поскольку Network Only не использует кэш, при сбоях сети
важно организовать fallback-логику:
registerRoute(
({ request }) => request.destination === 'image',
new NetworkOnly({
plugins: [
{
fetchDidFail: async ({ request }) => {
return caches.match('/images/fallback.png');
}
}
]
})
);
В этом примере, если изображение не загружается из сети, возвращается заранее кэшированная заглушка.
Network Only часто комбинируют с
Cache First или Stale While Revalidate на
разных маршрутах.Network Only, изображения —
Cache First.Workbox полностью поддерживает стратегию Network Only в
последних версиях (6.x и выше). Реализация полностью совместима с
Service Worker API и позволяет подключать плагины для расширенной
обработки запросов, логирования или аналитики.