简体   繁体   English

JavaScript(PWA)-初始化服务人员的正确方法是什么?

[英]JavaScript (PWA) - What is the correct way to initialize service-worker?

What is the better way to initialize service-worker used for PWA caching? 初始化用于PWA缓存的service-worker的更好方法是什么?

Method 1: I expect that in this case will be installed new SW instance. 方法1:我希望在这种情况下将安装新的SW实例。 I guess that's not necessary and I want to re-activate existing SW already running in the browser - am I right? 我想那是没有必要的,我想重新激活浏览器中已经在运行的现有软件-是吗?

 if ('serviceWorker' in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.register('sw.js').then(registration => { // Registration success }, function(err) { // Registration failed }); }); } 

Method 2: In this case I'm checking that there SW already registered and I'm installing registering a new one only if there is non registered. 方法2:在这种情况下,我将检查是否已经注册了SW,并且仅当尚未注册时才安装新的SW。

 if ('serviceWorker' in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.getRegistrations().then(registrations => { const isServiceWorkerNotRegistered = registrations.length === 0; if (isServiceWorkerNotRegistered) { navigator.serviceWorker.register('sw.js').then(registration => { // Registration success }).catch(error => { // Registration failed }); } else { console.log('Service worker already registered.'); } }); }); } 

On top of that... Is it really necessary to wait for window to load (line 2)? 最重要的是...是否真的需要等待窗口加载(第2行)? Since SW is running asynchronously in the browser I guess I don't need the app to be completely loaded. 由于SW在浏览器中异步运行,我想我不需要完全加载该应用程序。

Waiting for the load event is so that assets being downloaded by the service worker don't take bandwidth and device resources from rendering the currently requested page. 等待load事件是为了让服务工作者下载的资产不会占用呈现当前请求页面的带宽和设备资源。 See improving the boilerplate . 请参阅改进样板

For your registration question, use the simple first version. 对于您的注册问题,请使用简单的第一个版本。

Unless you change the URL of the service worker script, navigator.serviceWorker.register() is effectively a no-op during subsequent visits. 除非您更改服务工作者脚本的URL,否则navigator.serviceWorker.register()实际上是在后续访问期间的禁止操作。

subsequent visits 后续访问

If the service worker is not registered, register will register it. 如果未注册服务工作者,则register将对其进行注册。 If a service worker is already registered, register will basically not do anything. 如果服务人员已经注册,则register基本上不会执行任何操作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM