AJAX 查询在 Chrome 上的 DNS 查找和初始连接之间出现奇怪的延迟,但不是 FF,这是啥?
Posted
技术标签:
【中文标题】AJAX 查询在 Chrome 上的 DNS 查找和初始连接之间出现奇怪的延迟,但不是 FF,这是啥?【英文标题】:AJAX query weird delay between DNS lookup and initial connection on Chrome but not FF, what is it?AJAX 查询在 Chrome 上的 DNS 查找和初始连接之间出现奇怪的延迟,但不是 FF,这是什么? 【发布时间】:2015-04-30 00:10:58 【问题描述】:我的客户端上有一个 AJAX 查询,它将两个参数传递给服务器:
var url = window.location.origin + "/instanceStats"
$.getJSON(url, 'unit' : unit, "stat" : stat , function(data)
instanceData[key] = data;
var count = showInstanceStats(targetElement, unit, stat, limiter);
);
服务器本身是一个非常简单的 Python Flask 应用程序。在该特定 URL 上,它从查询中获取“unit”和“stat”参数以确定 CSV 文件的名称和该文件中的行,获取该行,然后将数据以 JSON 格式发送回客户端(大致1KB)。
有趣的是:当我测量数据返回所需的时间时,我观察到有些查询很快(在 20 到 40 毫秒之间),而有些查询很慢(在 320 到 350 毫秒之间) .改变“stat”参数(即在 CSV 中选择不同的行)似乎没有任何影响。快速和慢速查询通常来回切换(即所有偶数查询都快,所有奇数查询都很慢)。 Python 服务器本身为每个查询报告大致相同的时间。
AJAX 本身似乎也没有任何影响,因为我可以将 JS 中构造的 url 自己粘贴到浏览器中并获得相同的行为。以下是来自两个后续查询的一些测量结果:
快速:http://i.imgur.com/VQ7qopd.png
慢:http://i.imgur.com/YuG0ROM.png
这似乎是特定于 Chrome 的,因为我已经在 Firefox 上进行了尝试,并且相同的实验每次都会产生大致相同的查询时间(在 30 到 50 毫秒之间)。这很不幸,因为我想同时部署在 Chrome 和 Firefox 上。
是什么导致了这种行为,我该如何解决?
【问题讨论】:
【参考方案1】:我也有,而且完全一样:我的 Node.js 应用程序服务于 Ajax 请求,无论我请求哪个 /url
,它要么是 30ms
要么是 300ms
,它来回切换:奇怪请求很长,甚至请求都很短。
我在 Chrome Web Inspector(又名 Chrome DevTools)中看到的是,“DNS 查找”和“初始连接”之间存在很长的差距。
他们说这与OCSP
相关:
http://www.webpagetest.org/forums/showthread.php?tid=12357
OCSP 是某种证书验证协议: https://en.wikipedia.org/wiki/Online_Certificate_Status_Protocol
从localhost
移动到127.0.0.1
似乎可以解决这个问题:响应时间现在是30ms
。
【讨论】:
【参考方案2】:我也遇到过这种情况。它似乎只在使用 localhost 时发生。如果你使用 127.0.0.1(甚至是计算机名),它不会有额外的延迟。
【讨论】:
已确认。多么奇怪!无论如何,自从提出问题后我已经部署了我的服务器并且问题已经消失了(因为没有人再通过 localhost 访问它了)。 我相信这是 Windows 对单词“localhost”执行 DNS 查找,但不确定。尽管如此,我发现虽然使用数字 IP 127.0.0.1 有很大帮助,但它并不能真正解决问题。某处有帖子暗示它可能是 OCSP,但 127.0.0.1 不是 https 并且没有证书。如果我弄清楚了,我可能会在此处添加更多信息。以上是关于AJAX 查询在 Chrome 上的 DNS 查找和初始连接之间出现奇怪的延迟,但不是 FF,这是啥?的主要内容,如果未能解决你的问题,请参考以下文章