PHP avec MySQL est Lent
(IMPORTANT) EDIT 3: de l'Exécution de l'testajax2.php par lui-même et de ne PAS l'AJAX. La durée est d'environ la même, 1.02-1.03 s. Donc je suppose que cela signifie que le problème est en PHP-MYSQL ou XAMPP?? Lorsque couru par le biais de phpmyadmin requête, voici le résultat: affichage des lignes 0 - 29 ( ~50 total , la Requête a pris 0.0015 sec). Il semble que le problème ne réside pas dans l'Ajax après tout, mais peut-être en PHP. De l'aide s'il vous plaît... (je viens juste d'éditer la question du titre.)
Réponse: Ajouter la ligne suivante dans le fichier hosts situé dans ”C:\Windows\System32\drivers\etc”
127.0.0.1 localhost
La question avant:
Est-il normal pour l'Ajax de Jquery avec des requêtes sql sur l'autre côté de la durée minimale de 1 sec? J'ai essayé $.get
, $.post
,$.getjson
,$.ajax({type:'POST'})
, $.ajax({type:'GET'})
. Comme je l'ai dit, c'est le minimum, il pourrait s'aggraver à environ 3 sec même. Je doute que c'est les requêtes sql si, comme lorsque je l'ai essayer dans phpmyadmin, les résultats sont très rapides.
Il n'a pas d'importance aussi si les requêtes sont très simples et la table a seulement 2 éléments, il serait toujours suivre les 1 sec minimum. J'utilise la dernière XAMPP, et je ne sais pas si ça compte, mais je suis l'accès aux fichiers par le biais de localhost et 127.0.0.1. Merci!
EDIT: Merci pour la réponse, les gars. Je suis en cours d'exécution sur un environnement local, sur le même ordinateur portable, j'ai fait de ces fichiers. Jquery est mis à jour. La valeur retournée/tableau est json_encoded. J'utilise mysqli. La base de données est en InnoDB, et l'intérieur sont à seulement 5 tables, et il n'y a pratiquement rien sur eux. Voici un simple exemple de requête:
index.php
var test_id =2;
testcall();
function testcall(){
$.ajax({
url: 'testajax2.php',
type: 'POST',
data: {test_id: test_id},
success: function(data){
}
});
}
testajax2.php
$mysqli = new mysqli('localhost', 'root', '', 'testdb');
$mysqli->set_charset("utf8");
if(mysqli_connect_errno()) {
echo "Connection Failed: " . mysqli_connect_errno();
exit();
}
$testreceive = $_POST['test_id'];
$query = "SELECT First_Name from tblperson";
$result = $mysqli->query($query);
$row = $result->fetch_all(MYSQLI_ASSOC);
echo json_encode($row);
La tblperson contient 50 enregistrements, et il y a seulement 4 colonnes. Selon Firebug, il a fallu 1.03 s pour faire très simple tâche. Je ne suis pas sûr de ce que cela signifie vraiment, mais, en regardant à travers onglet réseau de Firebug, le bar est entièrement violet. 0 et 1.03 s en Attente. +1.03 s et 0 de Réception.
EDIT 2: Il n'a pas d'importance si je leur envoie comme json_encode($row)
ou foreach($row as $value){ echo $value['First_Name']; }
. Il serait encore au moins 1 seconde. J'ai essayé sur Chrome et Safari, et si je ne peux pas la durée exacte, je peux dire que c'est la même. Mais pour un simple appel ajax avec PAS de REQUÊTES SQL. Si je me souviens bien, c'est très rapide. Je serais de retour avec un échantillon et la durée de la sortie.
Pouvez-vous montrer le code?
Pour moi / ma configuration, ce n'est pas normal non.. localement mes requêtes ajax (en moyenne, selon firebug) sont réalisées dans 140ms. Mais comme l'autre commentaire dit.. nous n'avons aucune idée de ce qui se passe sur votre machine, la complexité, les scripts sont.
Combien de temps cela prend-il pour votre application afin de répondre à la même demande directement (pas ajax) ? combien de temps cela prend-il de la requête à exécuter dans la base de données mysql cli ? par le biais de php ? très probablement l'erreur n'est pas de l'ajax. Sauf si vous avez un étrange état de votre serveur, la raison doit être soit dans le codage que vous faites avec la sortie est envoyée à l'ajax json (?) ou, plus probablement, le sql lui-même. Plus de données sont nécessaires pour fournir des conseils.
Désolé, juste ajouté plus de détails. L'exécution de l'testajax2.php donne directement sur la même durée que lorsque je l'ai appelé avec l'Ajax. Soupir! Je ne sais pas quoi faire d'autre à partir d'ici.. Aider s'il vous plaît.
OriginalL'auteur Wap | 2012-11-27
Vous devez vous connecter pour publier un commentaire.
Réponse: Ajouter la ligne suivante dans le fichier hosts situé dans
”C:\Windows\System32\drivers\etc”
Cela a résolu mon problème. PHP-MySQL peut maintenant accomplir sa tâche selon la complexité de quelque part entre 20-500ms.
J'ai eu cette ligne à la fin de mon fichier hosts avec 10+ records et j'ai eu 2 secondes de retard, j'ai dû déplacer la ligne vers le haut et maintenant il n'y a pas de retard
Merci!!!! C'est exactement mon problème!
il était déjà là, mais ne fonctionne pas
OriginalL'auteur Wap
Il pourrait se produire dans un couple de places: 1) la requête elle-même, ou 2) la création de l'mysqli instance (et résultant de la connexion db). Si je devais deviner, je pense que votre problème est (2).
Un quick-and-dirty méthode de débogage consiste à utiliser
microtime()
.http://www.php.net/manual/en/function.microtime.php
Exemple:
Je vous remercie pour votre code, mais il y a une erreur à l'intérieur. Dans la ligne 14 vous utilisez $temp au lieu de $start!
OriginalL'auteur alttag
Le problème est le localhost de recherche à partir de localhost 127.0.0.1.
La solution consiste à ajouter la ligne
127.0.0.1 localhost
à votre fichier hosts de windows comme @Wap a répondu (et je vous remercie pour votre réponse!)Ou si vous n'avez pas accès au fichier hosts, vous pouvez simplement changer localhost 127.0.0.1 dans votre php mysqli composez le:
$mysqli = new mysqli('127.0.0.1'), 'root', '', 'testdb');
OriginalL'auteur newms87