我一直在从事一个需要我使用 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
猜猜我认为哪一个可能导致问题?