Chromium 浏览器的第一个 HEAD 请求需要更长的时间

Chromium Browser first HEAD request takes significantly higher time

我正在使用此 Javascript 代码发送 head 请求并记录每个请求所用的时间:

var url = "https://www.someexampleurl.com"
var xmlhttp = new XMLHttpRequest();
xmlhttp.responseType = "json";var t0 = performance.now();
xmlhttp.open("HEAD", url, true);
xmlhttp.onreadystatechange= function() {
    if(xmlhttp.readyState==4){
        var t1 = performance.now() - t0;
        resp = xmlhttp.getAllResponseHeaders();
        console.log(t1);
};};
xmlhttp.send();

我注意到第一个请求用了大约 614 毫秒,所有后续请求用了大约 170 毫秒。这很奇怪,所以我启动了带有 --disable-web-security 标志的 chromium 以允许 CORS 请求,并尝试将 HEAD 请求发送到 google 和 yahoo。结果是一样的。第一个请求将比后续请求花费更多的时间。

我尝试使用 PyCurl,在这种情况下完成请求的时间更加一致,这让我想知道这是否与某些 chromium 设置有关?例如一些禁用缓存等的选项可能会解决这个问题?

经过一番搜索,我已经弄明白了。在第一个 HEAD 请求期间花费的额外时间用于打开 TCP 连接。由于 Chrome 使连接保持活动状态一段时间(大约 1 分钟),因此后续请求花费的时间更少。 在 PyCurl 中,连接在请求完成时关闭,因此每个请求都会受到额外连接时间的影响。