Workbox-Getting Started 适用于 Workbox V5.1.2 Installation Installation (CDN Mode) 其实很简单, 项目根目录放置一段 service-worker }), ); Troubleshooting Uncaught ReferenceError: importScripts is not defined importScripts 方法只能放在 service-worker 需要将 importScripts 方法放置在 navigator.serviceWorker.register('xxx.js'); 这一行这里注册的 xxx.js 这个 service-worker
3 service-worker 中有 fetch,但是其不支持 chrome:// 协议。 所以,就无法获取到 icon 的具体数据了。 service-worker 的其它影响 没有了 window 全局对象,可以使用 globalThis 1 indexedDB 如果习惯于使用 window.indexedDB,还以为 indexedDB 在 service-worker 不支持了。
navigator.serviceWorker.register('/service-worker.js') .then(registration => { console.log('service-worker registered'); }).catch(err => { console.log('service-worker register error') });
/service-worker/', watch: ['. /service-worker'] }], deploy: { production: { user: 'SSH_USERNAME',
└── index.js └── service-worker-registration └── index.js /service-worker 文件夹,是 Service Worker 我们通过 /service-worker 来查看 ember-service-worker-index (代码) 的实现,揭露它到底做了些啥: import { INDEX_HTML_PATH, VERSION, INDEX_EXCLUDE_SCOPE } from 'ember-service-worker-index/service-worker/config'; import { urlMatchesAnyPattern } from 'ember-service-worker/service-worker/url-utils'; import cleanupCaches from 'ember-service-worker/service-worker/cleanup-caches'; const CACHE_KEY_PREFIX = 'esw-index';
: "icon-512.png", "type": "image/png", "sizes": "512x512" } ] } service-worker.js service-worker g$/, /\.gif$/, /\.ico$/ ]; const offlineAssetsExclude = [ /^service-worker\.js$/ ]; async function onInstall 修改service-worker 离线的原理也很简单,就是请求的数据都缓存起来,一般是缓存Get请求,比如各种页面图片等。
PWA一系列方案替代离线包策略,带来的好处是,属于web标准,适用于普通能够支持service-worker的H5页面。在允许兼容问题允许的情况下,建议主加。 客户端PWA 在实际测试、及和浏览器团队的同学了解和沟通中,service-worker在webview实现性能并没有想象中好。在某项目下掉sw后,整体大盘访问速度整体反而提升上升了大概300ms。 这对hybrid 应用而言,就提出了一项新的思路和挑战,能否在客户上实现一套基本的service-worker api?从而达到和web标准相兼容。
这些技术一般包括: manifest 一个 json 配置文件,用于定义 PWA 应用程序清单; service-worker 让 PWA 离线工作,可以说是 PWA 的核心技术; promise 和 这些技术里,service-worker 是核心,但也是最复杂的一个 API,下面就一一介绍一下这些 API。 background_color": "green", "theme_color": "red" } 关于 manifest 更多配置可以参考 MDN 文档:web app manifest[1] service-worker service-worker 有了 service worker 可以让网页在离线情况下依然可以访问,这极大地提升了 web app 的用户体验。 service-worker 的下载、安装、激活是由事件来控制的。
{ "Cache-Control": "max-age=30672000" }, rules: [ { test: /(index\.html|service-worker
有两点需要注意的地方: 项目里面不要用service-worker,这会影响我们的缓存设置,浏览器会优先使用service-worker缓存。 vue-cli4生成的模板自带service-worker ? ? 调试的时候记得允许缓存 ?
什么是service-worker Service Worker 是一种运行在浏览器后台的独立脚本,专门用于处理 Web 应用程序的离线缓存、消息推送、网络拦截等功能。
或者通过 service-worker 来缓存资源。Gzip 压缩给请求配上压缩相关的 request headers服务器端优化增加宽带,增加 CDN 服务,减少 cookie 使用。
/Service-Worker/sw.js').then(function(registration) { console.log('Service Worker Registered'); ); }); }).catch(function(err) { console.log('Service Worker Failed', err); }); } 其中, /Service-Worker
footer> <script src="scripts/app.js" async></script> </body> </html> APP Shell 已经完成了,接下来我们需要在 service-worker
秒检查一次是否有新的 ETag 或 Last-Modified 值 timer = setInterval(compareTag, 60000); etag打印结果示例: 方案三:应用改造成PWA + service-worker
CHECK_CRASH_INTERVAL) } } else if (data.type === 'clear') { delete pages[data.id] } }) 效果展示: 我们可以看到利用 service-worker 拿到崩溃结果,再传回给 A 页面就行了(小作业:可自行体验通过 service-worker 回传参数)。
the life of the worker 参考 http://www.w3ctech.com/topic/866 http://www.html5rocks.com/en/tutorials/service-worker
我们目前采用的是 Service-Worker + Workbox 的方式,利用 Service-Worker 可以拦截多个页面的网络请求,从而实现跨页面的静态资源缓存,这种方式实现比较简单。
navigator.serviceWorker .register('/service-worker.js') .then(registration => { console.log('service-worker registed') }) .catch(error => { console.log('service-worker registed error')
the life of the worker 参考 http://www.w3ctech.com/topic/866 http://www.html5rocks.com/en/tutorials/service-worker