Chrome延迟加载缓存的SVG文件

时间:2017-01-17 17:27:13

标签: ajax google-chrome svg browser-cache cache-control

我有javascript代码请求SVG资源文件进行显示。

SVG不会改变。它大约100kb,包含一个嵌入的jpeg图像(作为data:image/jpeg:base64)。所以我希望浏览器尽可能地缓存它。

加载svg的代码是这样的

$(btn).click(function(){
    console.log("loading...");
    $(element).load("mri/t1/axi/t1_axi_100.svg", function(resp, status, xhr){
       console.log("loaded");
       ...
    });
});

这似乎需要2秒钟。所有这些时间延迟都在" loading ..."和#34;加载"。您可以从分析(chrome dev工具时间轴)中看到,它们之间没有进行任何处理:左侧调用堆栈用于"单击"事件,正确的是#34;加载"处理程序。中间是" mri / t1 / axi / t1_axi_100.svg"据称装载(顶部附近的长蓝色条)。

enter image description here

然而,当我在chrome dev工具下查看网络时,我看到每个"下载"步骤<仅4毫秒。 (右侧窄蓝条;请注意大间隙)

enter image description here

您还可以在此处看到缓存已经起作用(来自磁盘缓存的svgs;来自内存缓存的嵌入式jpeg)。

此处显示了svg的4ms故障。 enter image description here

那为什么会有2秒的延迟?我的代码需要4毫秒,从缓存中检索似乎需要4毫秒!

"网络"中显示的标题标签是:

General
  Request URL:http://homphysiology.org/neurosim/basic/slices/mri/t1/axi/t1_axi_100.svg
  Request Method:GET
  Status Code:200 OK (from disk cache)
  Remote Address:173.254.28.84:80

Response Headers
  Accept-Ranges:bytes
  Cache-Control:max-age=2592000
  Content-Encoding:gzip
  Content-Type:image/svg+xml
  Date:Tue, 17 Jan 2017 15:49:02 GMT
  Expires:Thu, 16 Feb 2017 15:49:02 GMT
  Last-Modified:Thu, 11 Aug 2016 18:26:42 GMT
  Server:nginx/1.10.2
  Vary:Accept-Encoding
  X-Content-Type-Options:nosniff
Request Headers
  Provisional headers are shown
  Accept:text/html, */*; q=0.01
  Referer:http://homphysiology.org/neurosim/basic/case2_nonlinear.html
  User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
  X-Requested-With:XMLHttpRequest

Chrome可以轮询服务器并等待响应吗? 如果可以,我可以阻止这个吗?或者,是否可以及时触发XHR就绪状态?

1 个答案:

答案 0 :(得分:0)

看起来服务器延迟了。

您可以在时间轴和网络标签上向我们展示两种不同的资源下载。第一个是t1_axi_100.svg,第二个是t1_axi_070.svg。可能浏览器只从缓存中获取t1_axi_070.svgt1_axi_100.svg的{​​{3}}在我的情况下是1.75秒。