PWA入门

2023-06-07

序:

曾经我设想把css、js写到localStorage或者indexedDB里,实现网页的离线访问。但是尝试过发现根本不行,首先断网情况下首页是没办法访问的,其次从indexedDB里加载静态资源的异步问题处理起来也很烦,根本无法实现我想要的效果。

发现PWA应用可以完美满足我的需求。


https://developers.google.com/web/fundamentals/codelabs/your-first-pwapp/

https://learn.microsoft.com/zh-cn/microsoft-edge/progressive-web-apps-chromium/

 

先说原理:

     客户端(Client)发送请求到服务器(Server、CDN)获取资源。虽然浏览器对部分资源如图片、css、js做了缓存,但是其他的比如html、各种api的请求是没有缓存的,每次都需要发送到服务端。

如果数据没有更新的话,每次向服务端发送一次请求,不仅需要Server端进行处理浪费计算资源,还可能需要做Server端的缓存。还需要网络传输。

所以,浏览器提供的PWA相关接口,其中最重要的概念便是Service Worker。Service Worker其实就是一个代理,当用户访问该站点的所有URL时,请求都由Service Worker进行拦截。

     既然能拦截一切请求如首页html文件、css、js和各种api接口,那我们能做的事情就多了。比如,将所有数据如html、api响应结果都存在Service Worker中或者indexedDB或者localStorage中。基于此,甚至可以将该网页站点做成完全offline,就像一个安装了的app那样可以打开、操作数据。只不过需要在第一次打开后对站点做好缓存(安装)。

 

# 拦截请求

 

# 本地数据

 

# 缓存策略