Service workers 本质上充当 Web 应用程序、浏览器与网络(可用时)之间的代理服务器。这个 API 旨在创建有效的离线体验,它会拦截网络请求并根据网络是否可用采取来适当的动作、更新来自服务器的的资源。它还提供入口以推送通知和访问后台同步 API。
Service worker 的概念和用法
Service worker 是一个注册在指定源和路径下的事件驱动 worker
。它采用 JavaScript 控制关联的页面或者网站,拦截并修改访问和资源请求,细粒度地缓存资源。你可以完全控制应用在特定情形(最常见的情形是网络不可用)下的表现。
Service worker 运行在worker
上下文,因此它不能访问 DOM。相对于驱动应用的主 JavaScript 线程,它运行在其他线程中,所以不会造成阻塞。它设计为完全异步,同步API(如 XHR
和 localStorage
)不能在 service worker 中使用。
出于安全考量,Service workers 只能由 HTTPS 承载,毕竟修改网络请求的能力暴露给中间人攻击会非常危险。在 Firefox 浏览器的用户隐私模式,Service Worke不可用。
**注意:**Service workers可以更细致地控制每一件事情,支持当操作出错时终止操作
**注意:**Service workers大量使用
Promise
,因为通常它们会等待响应后继续,并根据响应返回一个成功或者失败的操作。Promise 非常适合这种场景。
注册
使用 ServiceWorkerContainer.register()
方法首次注册 service worker。如果注册成功,service worker 就会被下载到客户端并尝试安装或激活(见下文),这将作用于整个域内用户可访问的 URL,或者其特定子集。
下载、安装和激活
此时,你