私は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秒、2番目のリクエストが1.00秒待機していることがわかりました。調査を行ったところ、サーバーがビジー状態でリクエストを適切に処理できないことが原因である可能性があるため、時間がかかるとのことでした。しかし、コードとデータベースがローカルでホストされているため、それはありそうにないようです。リクエストは一度に1つずつ実行されるため、リクエストに競合が発生することはありません。
私はここで途方に暮れています。この問題のデバッグを開始する方法がわかりません。コードの一部を削除しても、実行が完全に停止するか、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
どちらが問題を引き起こしていると思いますか?