繁体   English   中英

为什么我的Ajax请求明显慢于普通浏览器请求?

[英]Why is my Ajax request significantly slower than a normal browser request?

我为朋友创建了一个网站。 因为他希望音乐播放器继续通过页面加载播放音乐,所以我决定通过ajax(由jQuery推动)将内容加载到页面中。 它工作正常,当没有javascript时,它很好地回退,后退/前进按钮工作得很好,但它在服务器上的速度非常慢。

几点:

  1. 初始页面加载相当快。 Chrome开发者控制台告诉我“index.php”在大约2.5秒内加载。 我设置它,以便查询字符串参数指示加载哪个页面,并且这个时间帧对于它们都是近似准确的。 对于主页,加载了8.4KB的数据。

  2. 当我通过ajax请求加载内容时,无论下载的数据大小如何,大约需要20秒。 以这种方式加载的最小数据量大约为500字节。 这里显然存在不匹配。

所以Chrome告诉我,花费的绝大部分时间都是“等待”,这意味着服务器正在处理请求。 所以,这只能意味着,我想,我的代码需要花费很长时间,或者服务器上发生了一些麻烦。 我不认为这是我的代码,因为它相当小:

$file = "";
if (isset($_GET['page'])) {
    $file = $_GET['page'];
} else if (isset($_POST['page'])) {
    $file = $_POST['page'];
} else {
    $file = "home";
}

$file = 'content/' . $file . '.php';

if (file_exists($file)) {
    include_once($file);
} else {
    include_once('content/404.php');
}

这是在content_loader.php文件中,我的javascript(在这种情况下)发送GET请求以及“page”参数。 返回HTML标记并将其放入页面上的DIV中。

我正在使用jQuery .get()简写函数,所以我不认为我可能会弄乱任何东西,我相信这不是一个Javascript问题,因为延迟是在等待来自服务器的数据。 而且,即使数据非常小,也需要大约20秒。

我目前认为这是服务器的问题,但我不明白为什么通过javascript发出的请求比通过浏览器传统方式的请求慢得多。 另外注意,一些内容页面确实连接到MySQL数据库,但有些页面却没有。 页面需要处理的内容或它包含的数据量似乎并不重要,大约需要20秒。

我很茫然......有没有人知道任何可以解释这一点的事情? 另外,如果这不是这个问题的正确位置,我会道歉,其他场地似乎也不适合这个问题。

正如我在评论中提到的,确定的可能性是反向DNS查找。 我以前遇到过这个问题,我敢打赌这是你请求缓慢的原因。 在常规apache和vhost配置以及.htaccess中都需要注意某些Apache配置指令。 以下是一些希望有用的链接:

http://www.tablix.org/~avian/blog/archives/2011/04/reverse_dns_lookups_and_apache/

http://betabug.ch/blogs/ch-athens/933

要查找更多资源,只需谷歌“apache slow reverse dns”。

一个很小的解释

在反向DNS查找中,尝试将IP地址解析为主机名。 大多数情况下,使用Apache,SSH和MySQL等服务这是不必要的,这是一个坏主意,因为它只会减慢请求/连接速度。 最好查找不同服务的配置设置,如果不需要则禁用反向DNS查找。

在Apache中,某些配置设置会导致反向查找。 HostnameLookups和允许/拒绝规则指定域而不是IP地址。 有关详细信息,请参阅上面的链接。

正如您在评论中所建议的那样,PHP脚本在最终运行后会快速执行。 花在等待Apache的时间 - 最有可能进行反向DNS查找和失败。 您知道问题不在于您的代码,而在于请求中涉及的其他服务。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM