抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

开发记录

问题描述

假如你很早之前访问过我的站点(就是去年,当时我还没有绘制站点logo,用的是原作者imsyy的logo(就是那个钟)),你就会发现:最近的更新logo和字体都没有变化

这是为什么呢?

原因分析

因为我们的浏览器在访问一个页面时,里面的图片之类的东西一般都不会改变,所以我们的浏览器就聪明地把他们都存在了本地,(这就是缓存cache)下一次访问直接访问本地缓存就行了,大大滴提高了访问速度。
但这种没刷新的情况是什么呢?因为我们制作网页时为了引用图片更方便,所以在修改图片内容时没有换图片的文件名,这样子就不用改代码。但对于缓存来说这两个文件是一样的(因为名字没变),所以就不会刷新。
这个时候,我们可以使用Ctrl+F5来刷新缓存,这样子就刷新了。


但是问题结束了吗?并没有!我们再按F5刷新(不刷新缓存),网页内容又变成了原来的样子!
为什么会这样呢?我们不是已经把缓存刷新至最新了吗?

进一步探究

这时候我们打开开发人员工具,找到网络一栏,发现了这些东西


履行者一栏,解释了我们是从哪里得到的这些文件。如果此栏为空,就代表它没有从缓存获取(例如hitokoto 一言,作为需要实时刷新文字内容,肯定不能存在缓存里面的啊)。如果此栏有信息,说明是从缓存获取的(例如我们的logo文件,就是从Service Worker获取的)
研究此栏的文字,我们发现:一共有4种缓存:

Service Worker
Memory Cache
Disk Cache
Push Cache

其中,Service Worker的解释如图


所以,我们只需要刷新Service Worker里面的内容就可以解决了

问题解决

那为什么ctrl+f5之后再F5就不行了呢?下图展示了我们Ctrl+F5后获取的内容。我们发现,memory cache里面的内容是最新的。再F5刷新,又是从Service Worker里面获取的文件,而它是旧的

所以说,Ctrl+F5并没有刷新Service Worker里面的文件,而是memory cache的。(或者说Service Worker被无视了
所以说,我们只用删除Service Worker里面的文件进行了。文件目录:

1
%appdata%\..\Local\Microsoft\Edge\User Data\Default\Service Worker\CacheStorage

尾声

故事是不是应该结束了?没有!刚刚是不是发现了一个问题:为什么logo.png这个文件F5刷新是从Service Worker读取的,Ctrl+F5又是从memory cache里面获取的呢?
因为Service Worker的优先级比memory cache高。有Service Worker 先用它,没有再用memory cache。而Ctrl+F5无视了Service Worker,就导致它仍存的是之前的文件。因为它不为空,所以就不会出现“找不到”的情况,优先级最高,也就不会去找memory cache拿最新的文件啦!!!

相关链接

清理 Edge 浏览器 Service Worker CacheStorage 所占据的空间 - 知乎 (zhihu.com)

ctrl f5后依旧从内存拿取文件,依旧有缓存机制存在_ctrl + f5 后仍存在disk cache memory cache-CSDN博客

缓存存在那些位置?缓存位置可分Service Worker、Memory Cache、Disk Cache、Push Cache四种_service worker diskchache memory cache-CSDN博客

评论