0

我一直在从事一个需要我使用 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

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

4

1 回答 1

2

如果您使用 PDO 进行连接。

而不是localhost用作主机使用127.0.0.1

于 2012-10-13T14:54:49.253 回答