Google chrome 为什么Chrome要花费时间;下载「;缓存中的内容?

Google chrome 为什么Chrome要花费时间;下载「;缓存中的内容?,google-chrome,google-chrome-devtools,http-caching,Google Chrome,Google Chrome Devtools,Http Caching,我提供的是静态内容,打算由浏览器无限期缓存。Chrome正在按预期缓存它,但仍在花时间“下载”它。我使用的是Chrome 46.0.2490.71 如您所见,内容是从缓存提供的,但下载内容仍需要68毫秒。这导致svg图像在每次页面加载时都会闪烁,即使文件已缓存 以下是匿名模式下页面加载的相关时间线信息: 每个事件的“总时间”和“事件时间”字段均为零。使用本地提供的文件(但仍然来自缓存)复制此事件时,“接收数据”事件只出现一次 需要注意的几个有趣的问题: 使用相同的编码从本地计算机提供相同的

我提供的是静态内容,打算由浏览器无限期缓存。Chrome正在按预期缓存它,但仍在花时间“下载”它。我使用的是Chrome 46.0.2490.71

如您所见,内容是从缓存提供的,但下载内容仍需要68毫秒。这导致svg图像在每次页面加载时都会闪烁,即使文件已缓存

以下是匿名模式下页面加载的相关时间线信息:

每个事件的“总时间”和“事件时间”字段均为零。使用本地提供的文件(但仍然来自缓存)复制此事件时,“接收数据”事件只出现一次

需要注意的几个有趣的问题:

  • 使用相同的编码从本地计算机提供相同的文件不会产生相同的下载延迟
  • 切换到匿名模式(无扩展)会使下载延迟减半,但不会消除延迟
  • 刷新页面的速度更快,因为从服务器接收304响应的时间似乎比从缓存加载响应的时间要短
  • 关闭开发工具似乎对延迟没有任何影响
  • IE 11、Edge和Firefox 41没有显示任何延迟

有什么可能的原因呢?

所以这与Chrome中缓存的工作方式有关。我对Chrome的代码库没有个人经验,但我对它的理论有一点了解。(我在这里还找到了一个关于Chrome缓存实现的参考,以供更好奇的人参考:)

作为参考,这里是我在Chrome中加载实际堆栈溢出问题的屏幕截图,网络面板打开,网络节流选项设置为“脱机”。请注意,此列表中的每个条目都是从缓存中获取的

你也会注意到Chrome花时间“下载”每个文件。为什么会这样?Chrome的缓存是一个数据库,该数据库也被压缩以节省空间。从缓存中检索文档时,该检索的价格不是零。Chrome必须在缓存数据库中查找该项,然后将该项膨胀到内存中,以便Chrome能够处理它。我不知道网络chrome开发工具面板如何显示时间的确切细节,但我猜从磁盘获取该文件,解压缩它,然后解析和处理结果就是“下载时间”中反映的内容


我不能评论为什么其他浏览器没有这种延迟,因为我对它们没有很多经验。这可能是因为他们使用了一种更有效的方法从缓存中获取内容(可能),也可能是因为他们一直将缓存保存在内存中(不太可能),或者是因为他们跳过了Chrome对缓存数据进行的一些完整性检查(可能)

当我传递头(“内容长度:xxx”)时,它的加载速度快了100%

我也有同样的问题,从缓存下载花费了很长时间。 问题是我的文件的gzip大小为410 KB(已经很大了) 解压它的大小是1.5MB,所以浏览器从缓存中加载它然后解压花费了很多时间

使用最新的chrome开发工具,您还可以看到解压缩的大小:
我遇到了同样的问题。我实现了PDF下载功能。点击下载链接,我在大约260毫秒内得到了响应,但在chrome上10秒后开始下载

修复:-我分析我的windows系统是64位的,chrome是32位的。在将chrome升级到64位之后,这个问题得到了解决。
我在

上找到了解决方案,我遇到了类似的“问题”。然而,当我在关闭DevTools的匿名窗口中加载我的页面(其“从磁盘缓存检索缓慢”依赖项)时,意外的延迟消失了。这向我表明问题可能是由于Chrome扩展或DevTools窗口的干扰造成的。

您加载了哪些扩展?大多数扩展在隐姓埋名的情况下不起作用…这可能是由您安装的扩展造成的。很多时候,它们会导致类似这样的奇怪错误,因为它们可以访问代码/浏览器中的许多内容。。。我从来没有遇到过这种情况,我一直使用devtools来衡量我的网站的性能,所以我不认为这是一个chrome bug。试着禁用它们,然后一个接一个地允许它们。老实说,我不认为67ms对于从磁盘加载142kb是不切实际的。有没有办法区分内存和缓存中磁盘的优先级?