Как изменить стандартную стратегию Cache First на сетевую первую стратегию в sw-precache?

Вот мое задание глотка:

 gulp.task('service-worker', ['clean:sw'], function (cb) {
swPrecache.write(path.join(global.config.offlineRoot, 'sw.js'), {
    staticFileGlobs: [
        global.config.offlineRoot + '/offline/**/*.{js,html,css,png,jpg,jpeg,gif,svg,ttf,woff,woff2}',
        global.config.offlineRoot + '/manifest.json'
    ],
    dynamicUrlToDependencies: {
        '/app-shell': ['lib/views/layouts/app-shell.hbs'],
        '/': [
            'lib/views/layouts/main-layout.hbs',
            'lib/views/index.hbs'
        ]
    },
    runtimeCaching: [

        {
            // See https://github.com/GoogleChrome/sw-toolbox#methods
            urlPattern: /^\/(?!login|admin)/,
            handler: 'networkOnly'
        }


    ],

    stripPrefix: global.config.offlineRoot,
    stripPrefixMulti: {
        "node_modules/": 'scripts/'
    },
    navigateFallback: '/app-shell',
    navigateFallbackWhitelist: [/^\/(?!login|admin)/],
    cacheId: "nodebeats",
    //   importScripts: ['scripts/sw-toolbox/sw-toolbox.js'],
    verbose: true,
    maximumFileSizeToCacheInBytes: 3097152, //3mb
    handleFetch: true//(global.config.env === 'prod')
})
    .then(cb)
    .catch(function () {
        cb();
    });

});

Из приведенного выше конфига, логин и админский маршрут выбираются только по сети, и индексный маршрут сначала подается из кэша, но я хочу, чтобы он был сетевым сначала, так как я связываю свою страницу со стороны сервера. Таким образом, динамические данные не реплицируются в приложении, если не нажать Ctrl + F5.

1 ответ

Для этого случая использования, когда ваш веб-контент должен отображаться на сервере динамически, я не думаю, что sw-precache хорошо подходит. sw-precache может пригодиться для определенных типов ресурсов, отображаемых на сервере, но только в том случае, когда содержимое, отображаемое на сервере, зависит от одного или нескольких локальных партиалов / шаблонов, которые затем создаются на сервере. (Вы настроили это отображение через dynamicUrlToDependencies.)

В тех случаях, когда отображаемый на сервере контент зависит от чего-то другого, кроме локальных шаблонов / частичных данных, например, если это зависит от текущего пользователя, вошедшего в систему, sw-precache не очень поможет. Ты можешь использовать sw-toolbox непосредственно для обработки этого типа динамического контента, если хотите, что-то вроде networkFirst Стратегия обеспечивает баланс между предоставлением нового ответа при наличии сетевого подключения и отказоустойчивостью возврата к предыдущему кэшированному ответу, когда сеть недоступна.

Другие вопросы по тегам