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
访问服务器,发现数据没有更新,服务器返回此状态码。然后,从缓存中读取数据。
几种状态对比
样式表一般在磁盘中,不会缓存到内存中去,因为CSS样式加载一次即可渲染出网页。但是,脚本却可能随时会执行,如果脚本在磁盘当中,在执行该脚本需要从磁盘中取到内存当中来。这样IO开销比较大,有可能会导致浏览器失去响应。因此,脚本一般在内存中。
对于大文件来说,大概率是不存储在内存中的,反之优先。当前系统内存使用率高的话,文件优先存储进硬盘。
在浏览器中,浏览器会在js和图片等文件解析执行后直接存入内存缓存中,那么当刷新页面时只需直接从内存缓存中读取(from memory cache);而css文件则会存入硬盘文件中,所以每次渲染页面都需要从硬盘读取缓存(from disk cache)。
三级缓存原理
先查找内存,如果有,直接从内存中加载
如果内存没有,则去硬盘获取,如果有直接加载
如果硬盘也没有,那么就进行网络请求
加载到的资源缓存到硬盘和内存
浏览器运行时是由几个进程协作的,所以操作系统为了节省内存,会把一部分内存里的资源交换回磁盘的交换区,当然交换是有策略的,比如最常用的就是LRU。所以缓存资源不过期的时候,如果资源在内存那么就from memory,如果只有在磁盘上就from disk。
示例:
加载一个图片资源顺序:
访问 -> 200 -> 退出浏览器
再次进入-> 200(from disk cache) -> 刷新 -> 200(from memory cache)
禁止200缓存方法
禁止200 OK (from disk cache) 这个缓存的方法是,ajax 请求是带上参数 cache: false。
如果觉得《200 OK(from memory cache)和 200 OK(from disk cache)》对你有帮助,请点赞、收藏,并留下你的观点哦!