上节研究了web worker;
我们知道web worker是一个独立的线程。而Service Worker是一个独立的进程
Service Worker基于WebWorker,继承webworker的各种特性。
Service Worker理解为一个介于客户端和服务端之间的一个代理服务器。
功能
- 拦截客户端的请求
- 向客户端发送消息
- 向服务器发送请求
- ...
- 最重要的作用是
资源缓存,对fetch进行拦截
webWorker和serviceWorker的区别
- serviceWorker是浏览器进程。webWorker是浏览器内核的线程
- serviceWorker不会因为浏览器关闭而销毁
- serviceWorker可以多页面使用(同一个服务,serviceWorker可以服务全部,webWorker是一一对应的)
- serviceWorker只能被使用在
https或者localhost中
CacheStorage
为了精确的、可编程的方式来控制缓存,CacheStorage被设计出来。可以根据需求通过js操作缓存的增删改。而传统的缓存,没有办法知道那些已经缓存了,更不可能对缓存进行操作。
工作
service worker的js脚本中可以定义对fetch请求监听方法,获取到对应的url请求后,可以根据caches.macth检测是否命中缓存,如果命中,则直接返回。否则主动向服务器发送fetch请求,然后根据需求进行缓存,同时要设置一个类似别名的东西。可以在Chrome-devTool-Application-CacheStorage中看到