Библиотека Sw-precache предназначена для автоматической генерации Service Worker, который кэширует ресурсы веб-приложения и обеспечивает офлайн-доступ. Центральным аспектом её работы является перехват сетевых запросов, что позволяет контролировать их поведение при отсутствии соединения с интернетом.
Service Worker, созданный Sw-precache, регистрирует обработчики
событий fetch, которые выполняют стратегию
Cache-First или Network-First, в
зависимости от конфигурации. Это ключевой механизм для инспектирования
запросов и анализа их результатов в офлайн-режиме.
В конфигурационном файле sw-precache-config.js можно
определить несколько важных параметров:
Пример настройки runtimeCaching для анализа сетевых
запросов:
module.exports = {
staticFileGlobs: [
'dist/**/*.html',
'dist/**/*.css',
'dist/**/*.js',
],
stripPrefix: 'dist/',
runtimeCaching: [{
urlPattern: /\/api\/.*$/,
handler: 'networkFirst',
options: {
cache: {
name: 'api-cache',
maxEntries: 50,
maxAgeSeconds: 300,
},
fetchOptions: {
mode: 'cors',
credentials: 'same-origin',
},
},
}],
};
Здесь каждый запрос к /api/* сначала пробует загрузку
через сеть, а при её недоступности используется кэш.
При работе офлайн полезно использовать инструменты разработчика в браузере:
200 (from ServiceWorker) или
304 (from cache).verbose: true. Это выводит
подробные сообщения о каждом кэшировании и обработке запросов.var swPrecache = require('sw-precache');
swPrecache.write('service-worker.js', {
staticFileGlobs: ['dist/**/*.*'],
stripPrefix: 'dist/',
verbose: true
});
Sw-precache поддерживает несколько подходов к работе с запросами:
Выбор стратегии зависит от того, какие ресурсы нужно инспектировать и как важна актуальность данных при офлайн-режиме.
Для детальной проверки можно внедрить пользовательские
обработчики событий fetch:
self.addEventListener('fetch', function(event) {
console.log('Перехваченный запрос:', event.request.url);
event.respondWith(
caches.match(event.request).then(function(response) {
if (response) {
console.log('Ответ из кэша:', event.request.url);
return response;
}
return fetch(event.request).then(function(networkResponse) {
console.log('Ответ с сети:', event.request.url);
return networkResponse;
});
})
);
});
Такой подход позволяет:
Sw-precache позволяет создавать runtime cache, что особенно важно для API-запросов:
Это позволяет инспектировать поведение приложения при офлайн-режиме и обеспечивать контроль за устаревшими или динамическими данными.
networkFirst для API, cacheFirst для
статических файлов).Эти методы обеспечивают полное понимание того, как Sw-precache обрабатывает сетевые запросы и кэширует ресурсы при работе в офлайн-режиме.