Sw-precache — это инструмент для генерации сервис-воркеров, которые позволяют кэшировать статические ресурсы веб-приложения. Для мобильных устройств с ограниченной памятью важно оптимизировать размер кэша и количество ресурсов, чтобы приложение оставалось быстрым и стабильным.
Ключевые параметры генерации кэша:
staticFileGlobs — массив путей к файлам, которые нужно
закэшировать.stripPrefix — позволяет удалить часть пути при
сохранении в кэше, сокращая его размер.runtimeCaching — определяет стратегии кэширования для
ресурсов, которые не были включены в статический список.Эта стратегия сначала проверяет кэш, и если ресурс найден — возвращает его, иначе делает сетевой запрос. Подходит для статических файлов, которые редко меняются:
runtimeCaching: [{
urlPattern: /.*\.js/,
handler: 'cacheFirst'
}]
Преимущества:
Недостатки:
Используется для данных, которые обновляются часто. Сначала делается сетевой запрос, а если он не удался — берется кэш:
runtimeCaching: [{
urlPattern: /\/api\/.*\/*.json/,
handler: 'networkFirst'
}]
Особенности:
Отдаёт кэш сразу, а затем обновляет его в фоне:
runtimeCaching: [{
urlPattern: /.*\.css/,
handler: 'staleWhileRevalidate'
}]
Преимущества:
Недостатки:
Для мобильных устройств критично контролировать размер кэша. Sw-precache позволяет использовать maxFileSizeToCacheInBytes:
staticFileGlobs: [
'dist/**.js',
'dist/**.css'
],
maxFileSizeToCacheInBytes: 2 * 1024 * 1024 // 2 МБ
Sw-precache автоматически обновляет сервис-воркер при изменении файлов. Для мобильных устройств с ограниченной памятью полезно:
navigateFallback для страниц
приложения.При ограниченной памяти важно удалять устаревшие кэши:
self.addEventListener('activate', event => {
const cacheWhitelist = ['my-app-cache-v2'];
event.waitUntil(
caches.keys().then(cacheNames => {
return Promise.all(
cacheNames.map(cacheName => {
if (!cacheWhitelist.includes(cacheName)) {
return caches.delete(cacheName);
}
})
);
})
);
});
Преимущества подхода:
cacheFirst с ограничением размера.networkFirst или staleWhileRevalidate.staleWhileRevalidate для минимальной задержки.Важное: комбинирование стратегий позволяет максимально эффективно использовать кэш на устройствах с ограниченной памятью, снижая нагрузку на сеть и обеспечивая быстрый отклик интерфейса.
Для контроля кэширования рекомендуется подключать логирование сервис-воркера:
self.addEventListener('fetch', event => {
console.log('Fetching:', event.request.url);
});
Эти методы в комбинации обеспечивают эффективное и предсказуемое поведение кэша даже на устройствах с ограниченными ресурсами.