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

时间:2013-04-13 04:57:48

标签: javascript jquery ajax

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

几点:

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

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

  3. 所以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秒。

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

1 个答案:

答案 0 :(得分:1)

正如我在评论中提到的,确定的可能性是反向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查找和失败。您知道问题不在于您的代码,而在于请求中涉及的其他服务。

希望这有帮助!