1

これが私のgulpタスクです:

 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 を押さない限り、動的データはアプリで複製されません。

4

1 に答える 1

2

Web コンテンツをサーバー上で動的にレンダリングする必要があるユース ケースには、あまり適していないと思いますsw-precachesw-precacheサーバーでレンダリングされる特定のタイプのリソースに役立ちますが、サーバーでレンダリングされるコンテンツが、サーバー上で構成される 1 つ以上のローカル パーシャル/テンプレートに依存する場合に限られます。( を介してそのマッピングを設定しdynamicUrlToDependenciesます。)

サーバーでレンダリングされたコンテンツが、現在ログインしているユーザーに依存している場合など、ローカル テンプレート/パーシャル以外のものに依存している場合はsw-precache、あまり役に立ちません。必要に応じて、このタイプの動的コンテンツを処理するために直接使用できます。戦略sw-toolboxのようなものnetworkFirstは、ネットワーク接続があるときはいつでも新しい応答を提供することと、ネットワークが接続されたときに以前にキャッシュされた応答にフォールバックする回復力との間でバランスをとります。利用できません。

于 2016-09-06T17:08:21.533 に答える