service-worker
workbox
谷歌开源库workbox,workbox 内部帮你对缓存做了大量的逻辑代码处理,并且也支持非常多种不同的缓存策略,并且也封装好了 sw.js 文件的更新策略,另外它的配置也非常简单。有时候站在巨人的肩膀上是更好的一种选择。
workbox 目前封装好的4种缓存策略
- Stale-While-Revalidate
- Cache First
- Network First
- Network Only
- Cache Only
Stale-While-Revalidate
这一缓存策略和先有的http的同名策略几乎相同,优先选择本地缓存,随后请求并更新缓存,换而言之,要到下一次请求才会正确更新。
这个缓存策略是首先通过service worker匹配缓存,并且每次仍然还是会fetch一次接口,并将请求的结果更新缓存。如果匹配不到缓存的情况下会直接返回fecth到的数据。
CACHE FIRST
缓存优先,顾名思义,优先访问缓存,如果在缓存不可用的情况下在使用网络进行请求
可以从代码发现每次都会先匹配缓存,缓存匹配不到才会重新fetch并缓存,所以这种方式对于数据更新频繁的情况并不适用。他比较适用于一些静态资源的缓存。
NETWORK FIRST
network-first 是一个比较复杂的策略,它接受networkTimeoutSeconds参数,如果没有传这个参数,请求将会发出,成功的话就返回结果添加到缓存中,如果失败则返回立即缓存。
这种网络回退到缓存的方式虽然利于那些频繁更新的资源,但是在网络情况比较差的情况(无网会直接返回缓存)下,等待会比较久,这时networkTimeoutSeconds就提供了作用。如果设置了,会生成一个setTimeout后被resolve的缓存调用,再把它和请求放倒一个Promise.race中,那么请求超时后就会返回缓存。
NETWORK Only
Cache Only
NETWORK Only 是只用fetch接口数据,Cache Only 是只用缓存,两种一般都不适用。
