Service Worker 拥有懈弛存相干的 API ,这让他可以储存资本。和内存储存不合的是这种存储方法是持久的。即使该标签页被封闭甚至浏览看重启,这些被存储的资本都不会损掉。只有当开辟者明白表示要移除他们的时刻(应用 cache.delete(resource)),他们才会被移除。别的一种情况就是当浏览器的存储空间不足时,他会将全部 Service Worker 缓存还有其他源存储如 indexedDB、localStorage 等都清除掉落。也是以,Service Worker 能确保他的存储和其他源存储是同步的。
Service Worker 只负责特定的域,换言之,他最多只能治理一个 host。是以,Service Worker 只能控制来自特定域内的文档的请求。
HTTP 缓存
一方面,他们的存储是持久的,并且能被不合的会话甚至不合的网站重用。如不雅一个资本被一个网站下载了,他也可以被其他网站重用,
而另一方面,HTTP 缓存遵守 HTTP 语义(名字早已暗示了一切)。他乐于供给他认为认为是“新鲜”的资本(基于由响应的缓存头声明的生命周期)、校验那些须要从新验证的资本、并拒绝存储那些它不该该存储的资本。

HTTP 缓存拥有一个基于内存的组件。他负责为请求匹配资本。可是一旦资本匹配成功,它须要大年夜磁盘中获取资本内容,这是一个较为昂贵的操作。
上文我们提到 HTTP 缓存遵守 HTTP 语义。这根本是精确的。除了一个例外情况,HTTP 缓存会存储一些资本一段时光。浏览器可以或许为下次导航预取资本。我们可以经由过程显示的指令()或者依附浏览器内部机制完成。这些被预取的资本会被保存下来直到下次导航,尽管它们可能是不许可缓存的。所以当预取资本达到 HTTP 缓存时,它会被缓存(并且不须要校验就会被供给)大年夜概五分钟。
尽管 HTTP 缓存看起来十分的严格,但 Questy 照样鼓起勇气上前询问有没有匹配的资本。然而谜底依旧是没有。
她照样得持续跟着收集往前走。这段路程时恐怖并且未知的,然而 Questy 知道无论若何她都要找到她须要的资本。所以她只能持续。这时刻她找到了一个对应的 HTTP/2 会话。并且预备经由过程收集持续前行,这时刻她溘然看到了……
推送“缓存”
这个容器并不是持久的。当会话停止后,未被认领的资本(例如,大年夜来没有被请求匹配到的)就会被移除。如不雅资本是由不合的 HTTP/2 会话获取的,他们并不会匹配。除此之外,推送缓存只会存储资本一段时光(在基于 Chromium 的浏览器里,这个时长约为五分钟)。
HTTP 缓存(有时刻也被他的同伙成为“磁盘缓存”)和 Questy 之前碰到过的缓存不太一样。
推送缓存根据请求的 URL 和请求头匹配响应,但他不遵守严格的 HTTP 语义。
- 规范里也没有明白定义推送缓存,所以再各个浏览器、体系或者 HTTP/2 客户端间的实现可能会不一样。
尽管信念不大年夜,Questy 照样上前询问是否有匹配的请求。令人惊奇的是,他真的有!!Questy 喜出望外的认领了这个资本(这也意味着它将这个 HTTP/2 流大年夜待认领容器中移除)。如今她可以归去衬着这个资本了。
在他们回程的路上,他们走过了 HTTP 缓存,并且话费了一些时光去复制了一份资本以备日后应用。
分开辟络栈后,他们回到 Service Worker 的辖区,而 Service Worker 也将一份资本的拷贝存储到本身的缓存中才让他们回到衬着器里。
最终,一旦它们会到衬着器,内存缓存就会保存一份资本的引用(而不是拷贝)。如许子在稍后如不雅在同一个导航会话中须要这份资本,他就可以将雷同的资本分派给他。

于是,它们就幸福快活的住在了一路,直到文档被移除,然后他们都被垃圾收受接收了。

不过那是别的一天的故事了。
要点
所以,大年夜 Questy 路程中我们能进修到什么呢?
- 不合的请求可以大年夜不合的浏览器缓存中匹配的资本。
- 请求匹配资本的缓存的不合会影响这个请求是否会被开辟者对象和资本急鹞鲼所展示。
- 推送资本不会被持续存储除非他们被请求所认领。
- 不克不及存储的预加载资本鄙人一?导航时不会存在。这是预加载(preload)和预取(prefetch)间的最大年夜差别。
- 因为还有很多处所规范没有明白定义,所以不合的浏览器实现会有差别。我们须要弥补这些差别。
总而言之,如不雅你应用预加载,HTTP/2 推送, Service Worker 又或者其他高等技巧来加快你的网站,你可能会留意到内部缓存的实现情况。懂得这些内部缓存和他们的运作方法能让你更好的解决问题并且削减不须要的麻烦。
【编辑推荐】
- 应用webpack治理多页应用技能总结
- 浏览器内Web开辟的10个重要提示
- Angular对React:一场关于Web开辟者支撑率的史诗对决
- Java Web模板代码生成器的设计与实现
- WebGL实现雨水特效实验
推荐阅读
基本常识HTTP协定我们浏览网页的浏览器和手机应用客户端与办事器通信几乎都是基于HTTP协定,而爬虫可以看作是一个另类的客户端,它把本身假装成浏览器或者手机应用客户端,按照本身的逻辑>>>详细阅读
本文标题:关于Web缓存的那些风流事儿
地址:http://www.17bianji.com/lsqh/34755.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示