Mam kilka wywołań ajaxowych na stronie, która wymaga pewnych treści json. Podczas wszystkich tych połączeń otrzymuję znaczny czas oczekiwania na zakończenie odpowiedzi. W przypadku każdego z tych połączeń występuje okres "oczekiwania" trwający kilka sekund, jak pokazano poniżej w panelu Chrome Network. Mam załączeniu zdjęcie:Dlaczego długość "oczekiwania" jest tak długa na moje połączenie Ajax? (Panel sieci Chrome)
Nie jestem pewien, co jest przyczyną, że jak zrobiłem kilka badań porównawczych na temat kodu php, który przeglądając bazę danych, a zgodnie z tym, wezwanie dla zapytania a przetworzenie jsona do odesłania trwa około 0,001 sekundy.
Czy to jest tylko kwestia opóźnienia sieciowego? Czy jest to problem, w którym nie wykonuję poprawnie zapytania do bazy danych? Może zalewa maksymalne połączenia w oknie przeglądarki? Brak pomysłu. Pozostałe żądania poruszają się równie powoli, więc wydaje się, że może to być coś spójnego.
Oto kolejny zdjęcie resztę czasu żądania (z drugiej wywołanie główny ajax biorąc tylko tyle czasu, ile rozmowy get_usergames_simple:
Dla porównania, tutaj jest wywołanie 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);
});
};
A oto kod php w sterowniku działa zapytania:
$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;
Czy jest coś powoli konstruktora kontrolera? –
To świetne pytanie! Nie myślałem o tym ... Pozwól mi zrobić jakiś ślad na stole i wrócić do ciebie. – janson0
Dlaczego nie ma 'json_encode()' zamiast konkatenacji ciągów? – complex857