5

いくつかのjsonコンテンツを要求するページでいくつかのajax呼び出しがあります。これらすべての呼び出しで、応答が完了するまでにかなりの待ち時間が発生します。以下のChromeネットワークパネルに示すように、これらの通話ごとに、通話には数秒の「待機」期間があります。写真を添付し​​ました:

Ajax呼び出しを待っています-スクリーンショット1

データベースにクエリを実行しているphpコードでベンチマークを行ったため、原因がよくわかりません。それに応じて、クエリの呼び出しとjsonの返送処理が0.001秒程度で実行されています。

それで、これは単なるネットワーク遅延の問題ですか?これは、データベースクエリを正しく実行していない場合の問題ですか?たぶん私はブラウザウィンドウごとの最大接続数を氾濫させていますか?わからない。他のリクエストも同じようにゆっくりと動いているので、一貫性のあるものである可能性があります。

これが残りのリクエストタイミングの別の写真です(他のメインのajax呼び出しはget_usergames_simple呼び出しと同じくらいの時間がかかります: すべてのリクエスト

参考までに、ここにajax呼び出しがあります:

self.getGamesContent = function()
{
  var userID = "<?php echo $userID; ?>";

  var post_data = {
    userID: userID
  };

  $.post("https://mydomain.com/games/get_usergames_simple/", post_data, function(result)
  {
    var json = $.parseJSON(result);

    var mappedGames = $.map(json.games, function(item) {
      return new GameItem(item)
    });
    self.gameitems(mappedGames);
  });
};

そして、クエリを実行しているコントローラーのphpコードは次のとおりです。

$userID = $this->input->post('userID');
$this->benchmark->mark('code_start');

$userGames = $this->cache->model('games', 'getGamesSimpleByUserID', array($userID), 120); // keep for 2 minutes

$returnString = "{";

$returnString .= '"user_id": "' . $userID . '",';

$gameCount = 0;

$returnString .= '"games": [';
foreach ($userGames as $ug)
{
  $returnString .= "{";
  $returnString .= '"user_id" : "' . $userID . '",';
  $returnString .= '"game_id" : "' . $ug->GameID . '",';
  $returnString .= '"game_name" : "' . $ug->GameName . '",';
  $returnString .= '"game_image" : "' . $ug->GameImage . '",';
  $returnString .= '"description" : "' . htmlspecialchars($ug->GameDescription) . '",';
  $returnString .= '"genre_id" : "' . $ug->GameGenreCatID . '",';
  $returnString .= '"genre_name" : "' . $ug->GameGenreName . '",';
  $returnString .= '"publisher_id" : "' . $ug->GamePublisherID . '",';
  $returnString .= '"publisher_name" : "' . $ug->GamePublisherName . '",';
  $returnString .= '"developer_id" : "' . $ug->GameDeveloperID . '",';
  $returnString .= '"developer_name" : "' . $ug->GameDeveloperName . '",';
  $returnString .= '"active_flag" : "' . $ug->GameIsActive . '",';
  $returnString .= '"create_date" : "' . $ug->GameCreateDate . '",';
  $returnString .= '"remove_date" : "' . $ug->GameRemoveDate . '",';
  $returnString .= '"last_update_date" : "' . $ug->GameLastUpdateDate . '",';
  $returnString .= '"user_syncing_game" : "' . $ug->UserSyncingGame . '"';
  $returnString .= "},";
  $gameCount++;
}

if ($gameCount > 0)
  $returnString = substr($returnString, 0, strlen($returnString) - 1);

$returnString .= "]}";


$this->benchmark->mark('code_end');

//echo $this->benchmark->elapsed_time('code_start', 'code_end');

echo $returnString;
4

1 に答える 1

2

確かに、コントローラーのコンストラクターにはいくつかの遅いアクションがあります。

Codeigniterに組み込まれているプロファイラーを使用することをお勧めします。

http://ellislab.com/codeigniter/user-guide/general/profiling.html

于 2013-03-16T18:53:52.187 に答える