Chrome中 disk cache失效分享

625 阅读2分钟

背景

前端项目中的地图文件(.b3dm)有的能缓存成功,有的不能缓存成功,见下面的截图(项目通过nginx启动,这个项目的地图是高精度的,所以文件会很大)

排查过程

1 对比response是否有不同 (主要看Cache-Control)

从network中获取的

从disk cache中获取

对比后,发现其实每个请求的response都有Cache-Control。max-age=604800,其实是应该缓存的,说明nginx的配置是没问题的,问题应该出现在客户端

2 对同一个文件进行分析

我们对比同一个文件12_0_0_0.b3dm

  • 一次从disk cache ,
  • 一次从network中获取

发现这个文件比较大,猜测是不是文件超出了chrome的最大限制。

disk cache的截图

network的截图

3 打开chrome的cache目录,看能否有新的发现

  • mac 的缓存目录是在 /Users/<用户名>/Library/Caches/Google/Chrome/Default/Cache
  • windows的缓存目录 C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data\Default\Cache

我们切换下展示,展示出具体的修改时间,发现是内容是不可读的,这个只能放弃了

4 使用firefox进行测试,验证是否跟浏览器内核有关

下方为firefox的截图,我们发现只有几个大于100M的没从缓存中取,别的都是从缓存中取,猜测可能是firefox的最大缓存值应该是比chrome 的大

如何在firoefox中查看缓存

在firefox 中查看缓存,可以在浏览器上输入 about:cache?storage=后进入下方页面,可以看到不同的cache

进入到disk页面可以看到具体的diskcache信息

5 经过查询资料后

  1. superuser.com/questions/3…

从下方的知道,cache的最大值是动态的,并不会无脑的cache

2. www.chromium.org/developers/…

从下方我们知道 chorme 对 cache 是有自己的删除策略

原文截图

翻译截图

结论

浏览器的缓存是有最大的限制的,并不是无脑的缓存,同时加入了算法来控制资源是否缓存,所以有的缓存会生效,有的会失效

参考文档

  1. superuser.com/questions/3…
  2. www.chromium.org/developers/…