最近做的项目有个关于页面缓存的问题需要解决,问题的大致情况就是项目每次上线后,用户那边不知道版本已经更新了操作的页面还是旧的内容,这样就带来了很多次生问题,每次都要去通知版本更新了让用户手动去刷新一下页面。造成这个问题原因就是浏览器的缓存问题,在浏览器打开一个网页,会发现网页加载的资源有的会显示(from memory cache)有的会显示(from disk cache),对于我们已经访问过的网页,浏览器会将这些已经加载和下载的资源缓存起来,以便下次再次访问的时候可以快速打开页面。那么这二者到底有什么区别,又分别是什么?
一、Memory Cache
Memory Cache 就是内存中的缓存,资源存放在内存中,如果浏览器关闭了那么内存中的资源就会被释放,所以它是一个短期缓存,它只会在下一个导航前保存这些缓存,有些情况下可能更短。当访问过页面后,有的数据和资源就会被放入内存中,比如:图片、样式、脚本等。 内存中的缓存读取数据比磁盘快,所以像样式和图片这类的资源会优先使用memory cache,这样读取速度快页面加载就不会容易卡顿。
是不是能让数据都存放在内存中呢?
数据不全是缓存在内存中,因为内存的空间是有限的,计算机中的内存一定比硬盘容量小得多,系统要根据实际情况合理分配内存的使用,所以能让我们使用的内存必然不多。
二、Disk Cache
Disk Cache就是将资源缓存在磁盘中,相比于内存缓存memory cache磁盘缓存容量就大得多了,但是读取速度会慢一点;所有的资源数据可以缓存,尤其是一些大文件,所以会看到有些脚本文件会存放在内存中,有的会存放在磁盘中,内存容量有限放不下的数据就会存入磁盘中。
Memory Cache和Disk Cache其实都是浏览器强缓存策略的方式, 不请求网络,资源从缓存中提取。
三、不同行为执行缓存方式不同
- 在地址栏中输入地址,主要是disk cache,如果没有再去服务器请求资源;
- 刷新网页(F5)):会根据当前运行环境内存来决定是从 Memory Cache 还是 从Disk Cache中,优先使用memory cache,没有匹配到的再去disk cache中查找;
- 强制刷新(Ctrl + F5):从服务器请求,不使用缓存,加载时间会比较慢;
浏览器会把哪些文件丢进内存(Memory Cache)中?哪些丢进硬盘(Disk Cache)中?
- 对于大文件来说,大概率是不存储在内存中的,反之优先
- 当前系统内存使用率高的话,文件优先存储进硬盘