web app 如何基于 Service Worker 实现离线使用?

How web app can used offlinely base on Service Worker?

我知道有很多关于 Service Worker 的文档,也有很多问题已经问过了。

但是今天对我来说是漫长的一天,所以我现在读了很多文档很累。

我只是想解释一下我对Service Worker的看法,它是如何帮助我们离线服务web应用的,希望大家能告诉我是否正确。

我所知道的关于 Service Worker 的一切都是 拦截 浏览器的网络请求作业,并做一些事情。所以我猜当它拦截时,它会缓存每个请求。因此,当网络未连接时,Service Worker 使用它缓存的数据为用户提供服务

感谢大家的回复,

是的,你的想法是对的。在这里,我将提供有关整个功能的更多详细信息。

一个 service worker (SW),就像一个 web worker,运行在与主 web 应用程序使用的线程不同的线程上。这允许 SW 保持 运行 即使网络应用程序未打开,例如允许接收和显示网络通知。

与 Web Worker 不同的 SW 用于一般用途,专门用作我们的 Web 应用程序和网络之间的 代理。然而,由我们来定义和实现 SW 必须在本地缓存数据的内容和方式,否则,默认情况下,SW 不知道要在缓存中存储什么。

为此,我们必须实施针对静态资产(例如 .js 或 .css 文件)甚至 URL(但保留在请注意,SW 使用的 CACHE API 只能缓存 GET 调用,不能缓存 PUT/POST)。 一旦我们感兴趣的资产或 URL 在特定策略的范围内定义,SW 将拦截所有传出请求并查看是否匹配并最终从本地缓存提供数据,而不是通过网络。

当然这取决于我们chose/implement的策略。

由于请求的数据已经在本地可用,即使用户离线,软件也可以提供。

有兴趣的,I wrote an article, describing in detail the service workers和一些最常用的缓存策略,应用于不同的场景。