今天看到了一个问题,如果浏览器关闭了再打开, 请求还是from cache吗?
笼统的说yes
现在简单的来分析一下,首先,大家可以想一下,浏览器的缓存存放在哪里,如何在浏览器中判断强制缓存是否生效?
先看一下这张图
会发现在浏览器开发者工具的Network的Size栏会出现的三种情况:
- from memory cache
- from disk cache
- 资源本身大小(比如:770B)
状态码及区别:
from memory cache(内存中的缓存): 不访问服务器,一般已经加载过该资源且缓存在了内存当中,直接从内存中读取缓存。浏览器关闭后,数据将不存在(资源被释放掉了),再次打开相同的页面时,不会出现from memory cache。
from disk cache(是硬盘中的缓存): 不访问服务器,已经在之前的某个时间加载过该资源,直接从硬盘中读取缓存,关闭浏览器后,数据依然存在,此资源不会随着该页面的关闭而释放掉下次打开仍然会是from disk cache。
304 Not Modified: 访问服务器,发现数据没有更新,服务器返回此状态码。然后从缓存中读取数据。
在浏览器中,浏览器会在js和图片等文件解析执行后直接存入内存缓存中,那么当刷新页面时只需直接从内存缓存中读取(from memory cache);而css文件则会存入硬盘文件中,所以每次渲染页面都需要从硬盘读取缓存(from disk cache)。
内存缓存(from memory cache)和硬盘缓存(from disk cache)特点
(1)内存缓存(from memory cache):内存缓存具有两个特点,分别是快速读取和时效性:
1、快速读取:内存缓存会将编译解析后的文件,直接存入该进程的内存中,占据该进程一定的内存资源,以方便下次运行使用时的快速读取。
2、时效性:一旦该进程关闭,则该进程的内存则会清空。
(2)硬盘缓存(from disk cache):硬盘缓存则是直接将缓存写入硬盘文件中,读取缓存需要对该缓存存放的硬盘文件进行I/O操作,然后重新解析该缓存内容,读取复杂,速度比内存缓存慢。
缓存原理
1、先查找内存,如果内存中存在,从内存中加载;
2、如果内存中未查找到,选择硬盘获取,如果硬盘中有,从硬盘中加载;
3、如果硬盘中未查找到,那就进行网络请求;
4、加载到的资源缓存到硬盘和内存;
执行顺序
现加载一种资源(例如:图片):
访问-> 200 -> 退出浏览器
重新进来-> 200(from disk cache) -> 刷新 -> 200(from memory cache)
附一张流程图梳理一下