1

在页面加载时,Service Worker 会在后台安装。

1) 服务工作者脚本的下载是否与页面加载并行发生并延迟加载?

2)安装事件中提到的资产是否与页面加载并行下载和缓存,或者在页面加载事件完成后

3) 资产缓存是否尊重 HTML Native 缓存,还是每次都重新下载?

4

3 回答 3

3

第一次,当您调用 register 时,服务工作者将被获取。对于更新检查,浏览器会在每次导航时执行此操作,但会等到加载后以避免与页面竞争。

于 2016-06-25T07:39:40.940 回答
2

Service Worker 的生命周期与您的网页完全分开。

  • 服务工作者在工作者上下文中运行:因此它没有 DOM 访问权限,并且运行在与为您的应用程序提供动力的主 JavaScript 不同的线程上,因此它不会阻塞。它被设计成完全异步的;因此,不能在 service worker 内部使用诸如同步 XHR 和 localStorage 之类的 API。
  • Service Worker 有自己的生命周期。通常在安装阶段,您需要缓存一些静态资产。如果所有文件都成功缓存,则安装服务工作者。
  • 当然,浏览器一直在缓存东西。这里的优势在于持久性和控制力。浏览器缓存很容易被覆盖,而应用程序缓存更持久。配置不当的服务器通常会迫使客户端重新获取不必要的内容,例如您无法控制的托管服务提供商。具有完整缓存 API 的服务工作者允许客户端完全控制,并且可以就缓存的内容和时间做出更明智的决定。
于 2016-06-22T18:31:44.267 回答
0

1) 服务工作者脚本的下载是否与页面加载并行发生并延迟加载?

一旦您调用服务工作者,就会下载服务工作者register(),它会并行执行,因此不会延迟加载。

2)安装事件中提到的资产是否与页面加载并行下载和缓存,或者在页面加载事件完成后。

任何源自 Service Worker 的网络请求都不会阻塞主线程或文档加载。

3) 资产缓存是否尊重 HTML Native 缓存,还是每次都重新下载?

来自服务工作者的请求尊重本机缓存(http 缓存),但您可以根据需要使用该属性修改此行为cache

从问题来看,您似乎认为来自 Service Worker 的注册与文档加载相协调,但事实并非如此。一旦调用register()或发现服务工作者更新后,注册服务工作者的所有阶段都会与网页加载分离(并并行运行)。

于 2016-06-27T11:03:00.393 回答