Параметр handleFetch является ключевым при конфигурации
генерации сервис-воркера через библиотеку sw-precache. Он
отвечает за контроль того, как сервис-воркер будет обрабатывать сетевые
запросы, попадающие под управление предзагрузки ресурсов. По умолчанию
sw-precache создает сервис-воркер с логикой кэширования и
отдачи ресурсов из кэша без необходимости ручной настройки.
Использование handleFetch позволяет полностью
кастомизировать этот процесс.
handleFetch — это булевый параметр, определяющий, будет
ли сервис-воркер перехватывать запросы браузера.
true — сервис-воркер автоматически перехватывает все
GET-запросы, сопоставимые с предзагруженными ресурсами, и возвращает их
из кэша при наличии.false — сервис-воркер не вмешивается в обработку
запросов; ресурсы будут доступны из кэша только через явные вызовы из
скрипта, например с использованием caches.match.Пример конфигурации:
const swPrecache = require('sw-precache');
swPrecache.write('service-worker.js', {
staticFileGlobs: [
'index.html',
'styles/*.css',
'scripts/*.js'
],
handleFetch: true
});
В этом примере все файлы из staticFileGlobs будут
автоматически кэшироваться и отдаваться сервис-воркером при сетевых
запросах.
При включении handleFetch: true сервис-воркер добавляет
перехват всех GET-запросов, что может повлиять на производительность в
следующих аспектах:
handleFetch тесно взаимодействует с несколькими
ключевыми параметрами sw-precache:
navigateFallback — определяет HTML-файл для возврата
при навигационных запросах, когда ресурс отсутствует в кэше.runtimeCaching — позволяет создавать правила для
динамического кэширования. При handleFetch: false эти
правила не применяются автоматически, их нужно обрабатывать
вручную.stripPrefix и replacePrefix — работают
независимо от handleFetch, но правильное использование
важно для корректного сопоставления URL и файлов в кэше.handleFetch: true для максимальной
автоматизации.handleFetch и управлять перехватом
запросов вручную, чтобы избежать конфликтов с
runtimeCaching.handleFetch: true, чтобы убедиться, что все статические
ресурсы корректно обслуживаются кэшем.swPrecache.write('service-worker.js', {
staticFileGlobs: [
'assets/**/*.{js,css,png,jpg}',
'index.html'
],
handleFetch: true,
navigateFallback: '/index.html',
runtimeCaching: [
{
urlPattern: /\/api\/.*$/,
handler: 'networkFirst'
}
]
});
В этом примере handleFetch обеспечивает автоматическую
отдачу статических ресурсов из кэша, а динамические запросы к
/api/ обрабатываются через стратегию
networkFirst, что позволяет получать свежие данные при
наличии сети и fallback на кэш при отсутствии соединения.
Параметр handleFetch является фундаментальным для
управления поведением сервис-воркера относительно сетевых запросов. Он
определяет, будет ли автоматическое кэширование работать без
дополнительной настройки или потребуется ручное управление запросами.
Грамотное использование этого параметра позволяет оптимизировать
офлайн-доступ, снизить нагрузку на сервер и повысить отзывчивость
веб-приложения.