200 OK(from memory cache)内存缓存
不访问服务器,直接从内存中读取缓存。
此时获取的数据是缓存到内存中的,当kill进程后(浏览器关闭),数据将不存在(资源被释放掉了)。
如果再次打开页面时,不会出现200 OK(from memory cache)。
特点
- 内存缓存容量小
- 快速读取:内存缓存会将编译解析后的文件,直接存入该进程的内存中,占据该进程一定的内存资源,以方便下次运行使用时的快速读取
- 时效性:缓存时效性很短,会随着进程的释放而释放
200 OK(from disk cache)硬盘缓存
不访问服务器,直接从磁盘中读取缓存,当kill进程后(关闭浏览器),数据还存在。
下次打开页面还是from disk cache。
原理
硬盘缓存是直接将缓存写入硬盘文件中,读取缓存需要对该缓存存放的硬盘文件进行I/O操作,然后重新解析该缓存内容,读取复杂,速度比内存缓存慢。
容量
硬盘缓存容量大
304 Not Modified
访问服务器,发现数据没有更新,服务器返回此状态码。然后,从缓存中读取数据。
几种状态对比
状态 | 类型 | 说明 |
---|---|---|
200 | form memory cache | 不请求网络资源,资源在内存当中,一般脚本、字体、图片会存在内存当中 |
200 | form disk ceche | 不请求网络资源,在磁盘当中,一般非脚本会存在磁盘当中,如css等 |
200 | 资源大小数值 | 从服务器下载最新资源 |
304 | 报文大小 | 请求服务端发现资源没更新,使用本地资源 |
三级缓存原理
-
先查找内存,如果有,直接从内存中加载
-
如果内存没有,则去硬盘获取,如果有直接加载
-
如果硬盘也没有,那么就进行网络请求
-
加载到的资源缓存到硬盘和内存
浏览器运行时是由几个进程协作的,所以操作系统为了节省内存,会把一部分内存里的资源交换回磁盘的交换区,当然交换是有策略的,比如最常用的就是LRU。所以缓存资源不过期的时候,如果资源在内存那么就from memory,如果只有在磁盘上就from disk。
示例:
加载一个图片资源顺序:
访问 -> 200 -> 退出浏览器
再次进入-> 200(from disk cache) -> 刷新 -> 200(from memory cache)
禁止200缓存方法
禁止200 OK (from disk cache) 这个缓存的方法是,ajax 请求是带上参数 cache: false。