更快的加载时间和更省的流量无疑是所有浏览器都追求的目标。为了达成这个目标,经典的以空间换时间的缓存机制自然必不可少。本文就总结一下浏览器中常见的几种缓存机制,目前本人还没有深入研究这几种缓存机制,所得的资料基本来源于网上,日后有时间必定要对这几种缓存机制进行下系统的研究。
1. 资源分类
在介绍缓存机制之前,先将资源分类罚抄一下:
WebCore 把要加载的资源分成两类,一类是主资源,比如 HTML 页面,或者下载项,一类是派生资源,比如 HTML 页面中内嵌的图片或者脚本链接。这两类资源对于回调的处理有很大的不同,比如,同样是下载失败,主资源可能需要向用户报错,派生资源比如页面中的一张图下载失败,可能就是图不显示或者显示代替说明文字而已,不向用户报错。
主资源的加载是立刻发起的,而派生资源则可能会为了优化网络,在队列中等待( 这里的立刻发起是 loader 层面的,不是 Network 层面的 ) 。 ResourceScheduler 这个类就是用来管理资源加载的调度。主要调度对象就是派生资源,会根据 host 来影响资源加载的先后顺序。
2. Memory Cache
Memory Cache是专门针对派生资源的,用于保存原始数据(比如CSS , JS 等),以及解码过的图片数据,通过 Memory Cache 可以节省网络请求和图片解码的时间。该种缓存机制顾名思义是缓存在内存中的,他的生命周期同资源所在的HTML文档的生命周期是一致的。
关于Memory Cache的数据结构可以参见这篇文档: