在设置Service Worker时,有一个没人问起的问题:到底谁才掌控着应用的生命周期?
常规的渐进式Web应用(PWA)模式下,浏览器主导了安装、缓存以及Service Worker生命周期的编排。应用虽然参与了这些决策,但Service Worker何时激活、存储如何管理、在特定平台上“已安装”意味着什么,最终都由浏览器说了算。
Spirit给出了不同的答案。应用自身手握安装、存储和更新的控制权,浏览器仅仅提供了一个运行时环境。这并非一个细微的差别,它始于一个核心框架的重构:spirit-sw.js是固件,而非中间件。
每一个常规的PWA都将Service Worker用作代理,它拦截请求,并决定是从缓存提供内容还是去网络上获取。Spirit使用Service Worker的方式则完全不同。它从不提供你的应用文件,也从不触碰Cache Storage。它只提供一个硬编码的引导字符串,这个字符串知道如何从IndexedDB中复活整个应用。这个Service Worker就是一个引导程序,每次都以完全相同的方式启动。其余的一切都由此衍生。
Spirit是一个基于IndexedDB的本地安装与引导系统,它由四个关键部分组成。
spirit-grave.js是存储层。它纯粹使用IndexedDB,不涉及DOM,没有网络交互。它的功能单一:将文件作为Blob埋葬,随后再将其挖掘出来。
spirit-reg.js是安装器。它只在首次真实的在线访问时运行一次。它会读取spirit-manifest.json文件,抓取其中列出的每一个文件,并将它们逐一埋葬在gnoke:spirit/files路径下的IndexedDB中。
spirit-sw.js是引导程序。它拦截每一个导航请求,并立即用硬编码在worker自身的HTML字符串进行响应。这个字符串内嵌了一个IndexedDB读取器,无需额外的请求。它从“坟墓”中重建应用:CSS以
热门跟贴