这个缓存用于对站点的连续导航。从Blink缓存中传递的资源在网络选项卡中标记为
(来自内存缓存)
。从浏览器缓存中提供的资源标记为(来自磁盘缓存)
。
现在我的问题是,哪些资源存储在此快速缓存中并从中传递? 根据我的测试,差别很大:
- 直接在HTML中的图像和脚本标签非常有效。
- 直接在HTML中的样式(链接)标签有时有效。有时它不起作用(在同一浏览器和同一会话中)。
- 以编程方式插入到HTML中的脚本标签几乎从不起作用。但也有时候它能正常工作。
磁盘缓存和内存缓存的一个重大区别在于与Service Workers一起使用时变得很明显。由内存缓存提供服务的请求无法在Service Worker中被观察到(因为缓存位于Service Worker之前)。由磁盘缓存提供服务的请求通过Service Worker(因为浏览器缓存位于Service Worker后面)。
为了展示这种行为,我建立了一个包含所有资源类型的测试页面:https://dm-clone-optimized.app.baqend.com/
您可以使用顶部的链接浏览网站,并观察其在网络选项卡和控制台中的请求行为。每个页面都加载相同的资源。
经过一段时间的导航(Chrome 70.0.3538.67),我大部分时间都会遇到以下情况:
![enter image description here](https://istack.dev59.com/mRETD.webp)
- HTML从网络获取
- 脚本标签
scripts.js
和scripts2.js
来自内存缓存 - 图像标签
logo.png
也来自内存缓存 - 样式链接标签
styles.css
来自磁盘缓存 :( - 通过编程方式添加的脚本标签
scripts2.js?id=1
也来自磁盘缓存 :(
![enter image description here](https://istack.dev59.com/QaVkG.webp)
缓存控制
头来处理所有资源。---- 编辑 ----
最让我担心的是:为什么动态添加的脚本根本没有被缓存?这对于像
require.js
这样的框架有明显的影响,因为它们将所有依赖项作为动态添加的脚本标记插入。