Pourquoi la “attente” est-elle si longue sur mon appel Ajax? (Panneau réseau Chrome)

J’ai quelques appels ajax sur une page qui demandent du contenu json. Sur tous ces appels, je reçois un temps d’attente considérable pour terminer la réponse. Pour chacun de ces appels, il existe une “période d’attente” de quelques secondes, comme indiqué dans le panneau Réseau de Chrome ci-dessous. J’ai joint une photo:

En attente de l'appel Ajax - Capture d'écran 1

Je ne suis pas vraiment sûr de ce qui le cause, car j’ai effectué des parsings comparatives sur le code php interrogeant la firebase database, ce qui signifie que l’appel pour la requête et le traitement du json à renvoyer est exécuté dans environ 0,001 secondes.

Alors, s’agit-il simplement d’une latence réseau? Est-ce un problème où je ne fais pas la requête de firebase database correctement? Peut-être que j’inonde le nombre maximal de connexions par fenêtre de navigateur? Aucune idée. Les autres demandes évoluent tout aussi lentement, il semble donc que cela puisse être cohérent.

Voici une autre photo du minutage des demandes restantes (l’autre appel principal ajax prend autant de temps que l’appel get_usergames_simple: Toutes les demandes

Pour référence, voici l’appel ajax:

self.getGamesContent = function() { var 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); }); }; 

Et voici le code php dans le contrôleur qui exécute la requête:

 $userID = $this->input->post('userID'); $this->benchmark->mark('code_start'); $userGames = $this->cache->model('games', 'getGamesSimpleByUserID', array($userID), 120); // keep for 2 minutes $returnSsortingng = "{"; $returnSsortingng .= '"user_id": "' . $userID . '",'; $gameCount = 0; $returnSsortingng .= '"games": ['; foreach ($userGames as $ug) { $returnSsortingng .= "{"; $returnSsortingng .= '"user_id" : "' . $userID . '",'; $returnSsortingng .= '"game_id" : "' . $ug->GameID . '",'; $returnSsortingng .= '"game_name" : "' . $ug->GameName . '",'; $returnSsortingng .= '"game_image" : "' . $ug->GameImage . '",'; $returnSsortingng .= '"description" : "' . htmlspecialchars($ug->GameDescription) . '",'; $returnSsortingng .= '"genre_id" : "' . $ug->GameGenreCatID . '",'; $returnSsortingng .= '"genre_name" : "' . $ug->GameGenreName . '",'; $returnSsortingng .= '"publisher_id" : "' . $ug->GamePublisherID . '",'; $returnSsortingng .= '"publisher_name" : "' . $ug->GamePublisherName . '",'; $returnSsortingng .= '"developer_id" : "' . $ug->GameDeveloperID . '",'; $returnSsortingng .= '"developer_name" : "' . $ug->GameDeveloperName . '",'; $returnSsortingng .= '"active_flag" : "' . $ug->GameIsActive . '",'; $returnSsortingng .= '"create_date" : "' . $ug->GameCreateDate . '",'; $returnSsortingng .= '"remove_date" : "' . $ug->GameRemoveDate . '",'; $returnSsortingng .= '"last_update_date" : "' . $ug->GameLastUpdateDate . '",'; $returnSsortingng .= '"user_syncing_game" : "' . $ug->UserSyncingGame . '"'; $returnSsortingng .= "},"; $gameCount++; } if ($gameCount > 0) $returnSsortingng = substr($returnSsortingng, 0, strlen($returnSsortingng) - 1); $returnSsortingng .= "]}"; $this->benchmark->mark('code_end'); //echo $this->benchmark->elapsed_time('code_start', 'code_end'); echo $returnSsortingng; 

Il y a certainement des actions lentes dans le constructeur du contrôleur.

Il est bien mieux d’utiliser le profileur intégré dans Codeigniter:

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