先简单介绍一下现有的前端缓存技术方案,主要分为http缓存和浏览器缓存。javascript
http缓存都是第二次请求时开始的,这也是个老生常谈的话题了。无非也是那几个http头的问题:css
HTTP1.0的内容,服务器使用Expires头来告诉Web客户端它可使用当前副本,直到指定的时间为止。前端
HTTP1.1引入了Cathe-Control,它使用max-age指定资源被缓存多久,主要是解决了Expires一个重大的缺陷,就是它设置的是一个固定的时间点,客户端时间和服务端时间可能有偏差。java
Last-Modified是服务器告诉浏览器该资源的最后修改时间,If-Modified-Since是请求头带上的,上次服务器给本身的该资源的最后修改时间。而后服务器拿去对比。react
若资源的最后修改时间大于If-Modified-Since,说明资源又被改动过,则响应整片资源内容,返回状态码200;git
若资源的最后修改时间小于或等于If-Modified-Since,说明资源无新修改,则响应HTTP 304,告知浏览器继续使用当前版本。github
前面提到由文件的修改时间来判断文件是否改动,仍是会带来必定的偏差,好比注释等可有可无的修改等。因此推出了新的方式。web
storage 简单的缓存方式有cookie,localStorage和sessionStorage。这里就不详细介绍他们的区别了,这里说下经过localStorage来缓存静态资源的优化方案。面试
localStorage一般有5MB的存储空间,咱们以微信文章页为例。算法
查看请求发现,基本没有js和css的请求,由于它把所有的不须要改动的资源都放到了localStorage中:
因此微信的文章页加载很是的快。
一般遵循如下基本步骤来使用 service workers:
下图展现了 service worker 全部支持的事件:
一个网站是否启用Service Worker,能够经过开发者工具中的Application来查看: