概述
Service workers 本质上充当 Web 应用程序、浏览器与网络(可用时)之间的代理服务器。这个 API 旨在创建有效的离线体验,它会拦截网络请求并根据网络是否可用采取来适当的动作、更新来自服务器的的资源。它还提供入口以推送通知和访问后台同步 API。
简单来说, Service Worker 可以在 Web 应用程序发出请求的时候拦截并加工,以一个类似于网络代理的身份在应用程序中。
有了这一特性再加上 Cache API 的加持,可以使得应用轻松的控制服务器的资源或者浏览器的缓存,以便于提高应用的性能,甚至于可以创造出一个离线的 Web 应用程序。
注意事项
- Service Worker 必须在 https 下才能运行
- 它是一种 JavaScript Worker,无法直接访问 DOM。 Service Worker 通过响应 postMessage 接口发送的消息来与其控制的页面通信,页面可在必要时对 DOM 执行操作。
- Service Worker 是一种可编程网络代理,让您能够控制页面所发送网络请求的处理方式。
- Service Worker 在不用时会被中止,并在下次有需要时重启,因此,您不能依赖 Service Worker
onfetch
和onmessage
处理程序中的全局状态。 如果存在您需要持续保存并在重启后加以重用的信息,Service Worker 可以访问 IndexedDB API。 - Service Worker 广泛地利用了 promise,因此如果您不熟悉 promise,则应停下阅读此内容,看一看 Promise 简介。