背景
前端项目中的地图文件(.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 经过查询资料后
从下方的知道,cache的最大值是动态的,并不会无脑的cache
2. www.chromium.org/developers/…
从下方我们知道 chorme 对 cache 是有自己的删除策略
原文截图
翻译截图
结论
浏览器的缓存是有最大的限制的,并不是无脑的缓存,同时加入了算法来控制资源是否缓存,所以有的缓存会生效,有的会失效