From 904c3db3ea8426d7d0d31bf23d18365c2ac33e7f Mon Sep 17 00:00:00 2001 From: andrey-git Date: Sun, 5 Nov 2017 19:26:27 +0200 Subject: [PATCH 1/5] Fix rules for SW file caching. --- gulp/tasks/gen-service-worker.js | 33 +++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/gulp/tasks/gen-service-worker.js b/gulp/tasks/gen-service-worker.js index 877ca1bd78..7e386ca18c 100755 --- a/gulp/tasks/gen-service-worker.js +++ b/gulp/tasks/gen-service-worker.js @@ -3,8 +3,7 @@ Generate a caching service worker for HA Will be called as part of build_frontend. -Expects home-assistant-polymer repo as submodule of HA repo. -Creates a caching service worker based on the CURRENT content of HA repo. +Creates a caching service worker based on the built content of the repo in hass_frontend. Output service worker to build/service_worker.js TODO: @@ -70,11 +69,11 @@ gulp.task('gen-service-worker', () => { var url = '/static/panels/ha-panel-' + panel + '-' + hash + '.html'; dynamicUrlToDependencies[url] = [fpath]; }); - var fallbackList = '(?!(?:static|api|local|service_worker.js|manifest.json))'; var options = { navigateFallback: '/', - navigateFallbackWhitelist: [RegExp('^(?:' + fallbackList + '.)*$')], + navigateFallbackWhitelist: + [/^(?:(?!(?:static|api|local|service_worker.js|manifest.json)).)*$/], dynamicUrlToDependencies: dynamicUrlToDependencies, staticFileGlobs: [ rootDir + '/icons/favicon.ico', @@ -86,13 +85,29 @@ gulp.task('gen-service-worker', () => { rootDir + '/fonts/roboto/Roboto-Bold.ttf', rootDir + '/images/card_media_player_bg.png', ], - runtimeCaching: [{ - urlPattern: /\/static\/translations\//, + // Rules are proceeded in order and negative per-domain rules are not supported. + runtimeCaching: [ + { // Cache translations on first access + urlPattern: '/static/translations/*', handler: 'cacheFirst', - }, { - urlPattern: RegExp('^[^/]*/' + fallbackList + '.'), + }, + { // Get static, api, and local (and home-assistant-polymer in dev mode) from network. + // Use cache only if Home Assistant server is unreachable. + urlPattern: '/(home-assistant-polymer|static|api|local)/*', + handler: 'networkFirst', + }, + { // Get manifest and service worker from network. + // Use cache only if Home Assistant server is unreachable. + urlPattern: '/(service_worker.js|manifest.json)', + handler: 'networkFirst', + }, + { // For rest of the files (on Home Assistant domain only) try both cache and network/ + // First access might bring stale data from cache, but a single refresh will bring updated + // file. + urlPattern: '*', handler: 'fastest', - }], + } + ], stripPrefix: 'hass_frontend', replacePrefix: 'static', verbose: true, From 2596d2ba52d13f92f0c21c891ae70d30c910b50a Mon Sep 17 00:00:00 2001 From: andrey-git Date: Sun, 5 Nov 2017 19:38:39 +0200 Subject: [PATCH 2/5] Change networkFirst to networkOnly --- gulp/tasks/gen-service-worker.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gulp/tasks/gen-service-worker.js b/gulp/tasks/gen-service-worker.js index 7e386ca18c..23d0b2b95d 100755 --- a/gulp/tasks/gen-service-worker.js +++ b/gulp/tasks/gen-service-worker.js @@ -94,12 +94,12 @@ gulp.task('gen-service-worker', () => { { // Get static, api, and local (and home-assistant-polymer in dev mode) from network. // Use cache only if Home Assistant server is unreachable. urlPattern: '/(home-assistant-polymer|static|api|local)/*', - handler: 'networkFirst', + handler: 'networkOnly', }, { // Get manifest and service worker from network. // Use cache only if Home Assistant server is unreachable. urlPattern: '/(service_worker.js|manifest.json)', - handler: 'networkFirst', + handler: 'networkOnly', }, { // For rest of the files (on Home Assistant domain only) try both cache and network/ // First access might bring stale data from cache, but a single refresh will bring updated From db9dc653e0bd9a965d9ebbc1470405ea7c52608b Mon Sep 17 00:00:00 2001 From: andrey-git Date: Sun, 5 Nov 2017 19:55:55 +0200 Subject: [PATCH 3/5] Remove stale comment --- gulp/tasks/gen-service-worker.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/gulp/tasks/gen-service-worker.js b/gulp/tasks/gen-service-worker.js index 23d0b2b95d..f48848ee5b 100755 --- a/gulp/tasks/gen-service-worker.js +++ b/gulp/tasks/gen-service-worker.js @@ -92,12 +92,10 @@ gulp.task('gen-service-worker', () => { handler: 'cacheFirst', }, { // Get static, api, and local (and home-assistant-polymer in dev mode) from network. - // Use cache only if Home Assistant server is unreachable. urlPattern: '/(home-assistant-polymer|static|api|local)/*', handler: 'networkOnly', }, { // Get manifest and service worker from network. - // Use cache only if Home Assistant server is unreachable. urlPattern: '/(service_worker.js|manifest.json)', handler: 'networkOnly', }, From 3025b6049f35d0daa88304acb217a0e2a20c41b5 Mon Sep 17 00:00:00 2001 From: andrey-git Date: Sun, 5 Nov 2017 20:59:46 +0200 Subject: [PATCH 4/5] Update rules --- gulp/tasks/gen-service-worker.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/gulp/tasks/gen-service-worker.js b/gulp/tasks/gen-service-worker.js index f48848ee5b..b0d05d6f59 100755 --- a/gulp/tasks/gen-service-worker.js +++ b/gulp/tasks/gen-service-worker.js @@ -87,12 +87,12 @@ gulp.task('gen-service-worker', () => { ], // Rules are proceeded in order and negative per-domain rules are not supported. runtimeCaching: [ - { // Cache translations on first access - urlPattern: '/static/translations/*', - handler: 'cacheFirst', + { // Cache static content (including translations) on first access. + urlPattern: '/static/*', + handler: 'cacheFirst', }, - { // Get static, api, and local (and home-assistant-polymer in dev mode) from network. - urlPattern: '/(home-assistant-polymer|static|api|local)/*', + { // Get api (and home-assistant-polymer in dev mode) from network. + urlPattern: '/(home-assistant-polymer|api)/*', handler: 'networkOnly', }, { // Get manifest and service worker from network. @@ -100,10 +100,11 @@ gulp.task('gen-service-worker', () => { handler: 'networkOnly', }, { // For rest of the files (on Home Assistant domain only) try both cache and network/ + // This includes the root "/" or "/states" response and user files from ""/local". // First access might bring stale data from cache, but a single refresh will bring updated // file. urlPattern: '*', - handler: 'fastest', + handler: 'fastest', } ], stripPrefix: 'hass_frontend', From 0dc3bc79261d8bc75433eef2024edbf66010c771 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sun, 5 Nov 2017 21:51:30 +0200 Subject: [PATCH 5/5] Update gen-service-worker.js --- gulp/tasks/gen-service-worker.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gulp/tasks/gen-service-worker.js b/gulp/tasks/gen-service-worker.js index b0d05d6f59..6bddfb15ca 100755 --- a/gulp/tasks/gen-service-worker.js +++ b/gulp/tasks/gen-service-worker.js @@ -99,8 +99,8 @@ gulp.task('gen-service-worker', () => { urlPattern: '/(service_worker.js|manifest.json)', handler: 'networkOnly', }, - { // For rest of the files (on Home Assistant domain only) try both cache and network/ - // This includes the root "/" or "/states" response and user files from ""/local". + { // For rest of the files (on Home Assistant domain only) try both cache and network. + // This includes the root "/" or "/states" response and user files from "/local". // First access might bring stale data from cache, but a single refresh will bring updated // file. urlPattern: '*',