Ajax请求等待时间

时间:2012-10-13 14:14:48

标签: php jquery ajax performance firebug

我一直在研究一个需要我使用Ajax的项目。在过去,我使用它创建一个项目没有任何问题,但这次每个请求至少花费1秒钟,这当然太长了。

我不能给你整个代码,但我会尽可能多地分享。请求如下:

/* *
 * Update the navigation screen
 */
    function UpdateNavigation() {
         $.ajax({
            type: "POST",
            url: "application/controllers/LocationController.php",
            dataType: "json",
            data: "action=GetSurroundings",
            success: function(data){
                $("#direction-north").html((typeof data.north != 'undefined' ? data.north : "") + '</br> North');
                $("#direction-west").html((typeof data.west != 'undefined' ? data.west : "") + '</br> West');
                $("#direction-center").html((typeof data.center != 'undefined' ? data.center : "") + '</br> Center');
                $("#direction-east").html((typeof data.east != 'undefined' ? data.east : "") + '</br> East');
                $("#direction-south").html((typeof data.south != 'undefined' ? data.south : "") + '</br> South');
            }
        });
    }

/* *
 * Update the current location
 */
    $('#navigation-list :button').click(function(event) {
        if (event.target.id == "direction-center")
            return;

         $.ajax({
            type: "POST",
            url: "application/controllers/LocationController.php",
            data: "action=SetLocation&value=" + event.target.id,
            success: function() {
                UpdateNavigation();
            }
        });
    });

据我所知,这样可以。改变它可能是一个好主意,但据我所知它不应该导致延迟。 LocationController文件非常大,但是它针对不同的情况使用了一个开关,所以实际执行的代码不是那么大。

使用FireBug我发现第一个请求正在等待1.01秒,第二个请求则等待1.00秒。我做了一些研究,人们告诉我,这可能是因为服务器太忙而无法正确处理您的请求,这就是为什么它需要这么长时间。但这似乎不太可能,因为代码和数据库是本地托管的。请求中不应存在冲突,因为它们一次只执行一次。

我在这里不知所措。我不知道如何开始调试这个问题。删除部分代码没有帮助,因为它要么全部停止执行,要么只停留1秒以上。这让我相信代码不是问题,虽然我可能是错的。

任何帮助都会受到极大的折磨!如果您需要更多信息,请不要犹豫。

编辑:更多的挖掘让我相信代码中的查询可能有问题?如果是这样,我正在使用以下(非常丑陋的)查询:

SELECT 
    character_location.block,
    character_location.location
FROM
    character_location
WHERE
    character_location.id = 1
LIMIT
    1



SELECT 
    zones.name,
    zones.location,
    zones.block
FROM
    zones
WHERE
    (
            `zones`.`location` = (".$getBlock['location']." - 1)
        AND
            zones.block = '".$playerBlock."'
    )
OR
    (
            `zones`.`location` = ".$getBlock['location']."
        AND
            zones.block = '".$playerBlock."'
    )
OR
    (
            `zones`.`location` = (".$getBlock['location']." + 1)
        AND
            zones.block = '".$playerBlock."'
    )
OR
    (
            `zones`.`location` = ".$getBlock['location']."
        AND
            zones.block = '".$playerBlockDown."'
    )
OR
    (
            `zones`.`location` = ".$getBlock['location']."
        AND
            zones.block = '".$playerBlockUp."'
    )
LIMIT
    5


UPDATE 
    character_location
SET
    character_location.block = '" . $targetBlock . "',
    `character_location`.`location` = " . $targetLocation . "
WHERE
    character_location.id = 1

猜猜我认为哪一个可能导致问题?

1 个答案:

答案 0 :(得分:2)

如果您使用PDO进行连接。

而不是使用localhost作为主持人使用127.0.0.1