Для интеграции sw-precache в проект на основе Grunt
используется модуль grunt-sw-precache. Он обеспечивает
автоматическую генерацию сервис-воркера, который кэширует статические
ресурсы, улучшая производительность веб-приложения и обеспечивая
возможность работы в офлайн-режиме.
Установка выполняется через npm:
npm install grunt-sw-precache --save-dev
После установки необходимо подключить модуль в файле
Gruntfile.js и зарегистрировать задачу:
module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-sw-precache');
grunt.initConfig({
swPrecache: {
options: {
cacheId: 'my-project',
filepath: 'dist/service-worker.js',
staticFileGlobs: [
'dist/**/*.html',
'dist/**/*.js',
'dist/**/*.css',
'dist/images/**/*.{png,jpg,gif,svg}'
],
stripPrefix: 'dist/',
runtimeCaching: [{
urlPattern: /\/api\//,
handler: 'networkFirst'
}]
}
}
});
grunt.registerTask('default', ['swPrecache']);
};
cacheId — уникальный идентификатор кэша. Используется для различения версий кэша при обновлении.
filepath — путь к файлу сервис-воркера, который будет сгенерирован. Обычно указывается в папке сборки.
staticFileGlobs — массив шаблонов файлов,
которые будут кэшироваться автоматически при установке сервис-воркера.
Поддерживаются подстановочные символы * и
**.
stripPrefix — удаляет указанный префикс из путей при формировании ключей кэша.
runtimeCaching — массив правил для кэширования
ресурсов, которые не включены в staticFileGlobs. Каждый
объект включает:
urlPattern — регулярное выражение для URL, подходящих
под кэширование.handler — стратегия кэширования
(networkFirst, cacheFirst,
fastest, networkOnly,
cacheOnly).В Grunt можно настроить автоматическое создание сервис-воркера как часть процесса сборки:
grunt.registerTask('build', [
'clean:dist',
'copy:dist',
'uglify',
'cssmin',
'swPrecache'
]);
Здесь swPrecache выполняется после копирования и
минификации файлов, гарантируя, что сервис-воркер будет содержать
актуальные ресурсы для кэширования.
При изменении файлов необходимо, чтобы сервис-воркер генерировал новую версию кэша. Для этого используются параметры:
?v=123).sw-precache можно комбинировать с задачами
clean, copy, uglify,
cssmin для комплексной сборки проекта:
clean:dist.copy:dist.uglify,
cssmin.swPrecache.Такой порядок обеспечивает, что кэш будут содержать только актуальные версии файлов.
Для проверки работы сервис-воркера:
При работе с динамическим контентом можно настроить
runtimeCaching с handler: networkFirst,
чтобы свежие данные подтягивались с сервера, а в случае недоступности
сети использовались кэшированные версии. Это особенно полезно для
API-запросов или контента, который часто обновляется.
Эффективная комбинация staticFileGlobs для статических ресурсов и runtimeCaching для динамических обеспечивает надежное кэширование всего веб-приложения.