Gros Délai avec Ajax/xajax
Cocoy1
Messages postés
37
Date d'inscription
Statut
Membre
Dernière intervention
-
Alain_42 Messages postés 5361 Date d'inscription Statut Membre Dernière intervention -
Alain_42 Messages postés 5361 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis en train d'essayer de faire un petit logiciel de gestion en php et j'ai besoin de piocher plusieurs fois dans la bdd pour generer du contenu.
Le probleme c'est qu'il y a un gros gros delai de raffraichissement qui est vraiment génant.
Je travail avec WampServer Version 2.2
J'ai fait un premier essai avec de l'ajax pur, gros delai.
Second essai avec xajax, delai encore plus important.
J'espère que vous pourrez m'aider, merci par avance.
voila le fichier sql d'une bdd pour test
voici le code avec xajax :
Je suis en train d'essayer de faire un petit logiciel de gestion en php et j'ai besoin de piocher plusieurs fois dans la bdd pour generer du contenu.
Le probleme c'est qu'il y a un gros gros delai de raffraichissement qui est vraiment génant.
Je travail avec WampServer Version 2.2
J'ai fait un premier essai avec de l'ajax pur, gros delai.
Second essai avec xajax, delai encore plus important.
J'espère que vous pourrez m'aider, merci par avance.
voila le fichier sql d'une bdd pour test
-- phpMyAdmin SQL Dump -- version 3.5.1 -- https://www.phpmyadmin.net/ -- -- Client: localhost -- Généré le: Lun 06 Août 2012 à 13:06 -- Version du serveur: 5.5.24-log -- Version de PHP: 5.4.3 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- Base de données: 'lol' -- -- -------------------------------------------------------- -- -- Structure de la table 'fournisseur' -- CREATE TABLE IF NOT EXISTS 'fournisseur' ( 'idFrs' int(11) NOT NULL AUTO_INCREMENT, 'adresseFrs' varchar(40) NOT NULL, 'nomFrs' varchar(20) NOT NULL, PRIMARY KEY ('idFrs') ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; -- -- Contenu de la table 'fournisseur' -- INSERT INTO 'fournisseur' ('idFrs', 'adresseFrs', 'nomFrs') VALUES (1, 'pppppppppppppppppppp', 'pppppppppp'), (2, 'kkkkkkkkkkkkkkkkkkkk', 'kkkkkkkkkkk'); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
voici le code avec xajax :
<?php require_once("/xajax_core/xajax.inc.php"); try { $bdd = new PDO('mysql:host=localhost;dbname=lol', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } function afficherInfos($idFrs) { try { $bdd = new PDO('mysql:host=localhost;dbname=lol', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $obj=new xajaxResponse(); $reponse = $bdd->query("SELECT * FROM fournisseur where idFrs='".$idFrs."'"); while ($donnees = $reponse->fetch()) { $infos=$donnees['nomFrs']."<br />".$donnees['adresseFrs']; } $obj->assign('infoFrs', 'innerHTML', $infos); return $obj; } require_once('./xajax_core/xajax.inc.php'); $xajax = new xajax(); $xajax->register(XAJAX_FUNCTION, 'afficherInfos');// $xajax->processRequest(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <?php $xajax->printJavascript();?> </head> <body> <p> je sais pas pourquoi ça rame autant T_T</p> <select multiple="multiple" size="20" name="listeFrs"> <?php $reponse = $bdd->query('SELECT idFrs,nomFrs FROM fournisseur'); while ($donnees = $reponse->fetch()) { ?> <option id=<?php echo $donnees['idFrs'];?> onclick="xajax_afficherInfos(this.id)"><?php echo $donnees['nomFrs'];?></option> <?php } $reponse->closeCursor(); ?> </select> <br /> <div id=infoFrs> </div> </body> </html>
A voir également:
- Gros Délai avec Ajax/xajax
- Delai virement vinted - Guide
- Delai livraison back market ✓ - Forum Vos droits sur internet
- Le logiciel amd a détecté un dépassement de délai du pilote - Forum Carte graphique
- Delai paiement le bon coin remise en main propre - Forum Vos droits sur internet
- Delai osd ✓ - Forum Téléviseurs
19 réponses
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
voila avec jquery ajax une solution qui fonctionne chez moi
et le code du fichier PHP: scriptPHP_reponse_a_ajax.php
(laisses ce nom)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <script type="text/javascript" src="jquery/jquery-1.3.2.min.js ">></script> <script type="text/javascript"> $(document).ready(function() { $("#listeFrs").click(function(e) { id=$('#listeFrs').val(); $.post("scriptPHP_reponse_a_ajax.php", {idFournisseur: id}, function(data) { $('#infoFrs').html(data); }); return false; }); }); </script> </head> <body> <?php try { $bdd = new PDO('mysql:host=localhost;dbname=lol', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } ?> <select multiple="multiple" size="20" name="listeFrs" id="listeFrs" > <?php $reponse = $bdd->query('SELECT idFrs,nomFrs FROM fournisseur'); while ($donnees = $reponse->fetch()) { ?> <option value="<?php echo $donnees['idFrs'];?>"><?php echo $donnees['nomFrs'];?></option> <?php } $reponse->closeCursor(); ?> </select> <br /> <div id="infoFrs"> </div> </body> </html>
et le code du fichier PHP: scriptPHP_reponse_a_ajax.php
(laisses ce nom)
<?php //script php d'interro de la BDD, appelé par Ajax try { $bdd = new PDO('mysql:host=localhost;dbname=lol', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } // recup de la valeur envoyée par Ajax $idFrs=$_POST['idFournisseur']; $reponse = $bdd->query("SELECT * FROM fournisseur where idFrs='".$idFrs."'"); //un seul résultat donc pas besoin de boucle while //deplus avec la boucle tellle que tu avait fait le contenu de $infos était écrasé à chaque passage de la boucle $donnees = $reponse->fetch(); $infos=$donnees['nomFrs']."<br />".$donnees['adresseFrs']; //envoi du resultat à Ajax echo $infos; ?>
Alors au premier essai, j'ai une erreur ligne 15 de scriptPHP_reponse_a_ajax
Notice: Array to string conversion in C:\wamp\www\logestion\scriptPHP_reponse_a_ajax.php on line 15
Donc j'ai remplacé '".$idFrs."' par 1 et ça marche
Par contre j'ai toujours un delai, que ce soit à la generation de l'erreur avec la ligne 15 d'origine ou à la génération de la reponse avec la ligne 15 modifiée :(
Merci de ton aide
$reponse = $bdd->query("SELECT * FROM fournisseur where idFrs='".$idFrs."'");
Notice: Array to string conversion in C:\wamp\www\logestion\scriptPHP_reponse_a_ajax.php on line 15
Donc j'ai remplacé '".$idFrs."' par 1 et ça marche
Par contre j'ai toujours un delai, que ce soit à la generation de l'erreur avec la ligne 15 d'origine ou à la génération de la reponse avec la ligne 15 modifiée :(
Merci de ton aide
je ne comprend pas tu dois avoir autre chose dans ton script qui gène car chez moi tout fonctionne nickel et sans délai
ben pourtant j'ai pris exactement le même code que toi, j'ai juste changé le repertoire pour jquery
<script type="text/javascript" src="jquery.js"></script>
je ne sais pas si ça peut jouer mais essayes avec le fichier jquery-1.3.2.min.js
il y a peut être aussi le temps de réponse de ta BDD
mais 0.5 à 1 sec ce n'est pas la catastrophe non ?
il y a peut être aussi le temps de réponse de ta BDD
mais 0.5 à 1 sec ce n'est pas la catastrophe non ?
sur mon post précédent, voyant que tu utilisait la version min, j'ai essayé dessuite ^^ echec ...
non comme ça c'est pas énorme c'est vrai, mais mon petit logiciel en est très dépendant, le moindre clic déclenche une fonction, et 0.5sec de chargement à chaque clic, ça peut-être très rapidement très énervant. Surtout quand il n'y a aucune raison pour que ça ne soit pas instantanné :(
J'avais recommencé le prog il y a quelques jours en chargeant toutes les données dont j'avais besoin d'un coup, puis en simulant les requete par des traitement php, mais c'est excessivement lourd et la maintenance risque d'être un peu rude ^^
donc je me suis remis en route avec xajax avec donc ces saletés de délai : /
Pour ce qui est de la bdd ... j'utilise WampServer Version 2.2
Merci de ton aide
non comme ça c'est pas énorme c'est vrai, mais mon petit logiciel en est très dépendant, le moindre clic déclenche une fonction, et 0.5sec de chargement à chaque clic, ça peut-être très rapidement très énervant. Surtout quand il n'y a aucune raison pour que ça ne soit pas instantanné :(
J'avais recommencé le prog il y a quelques jours en chargeant toutes les données dont j'avais besoin d'un coup, puis en simulant les requete par des traitement php, mais c'est excessivement lourd et la maintenance risque d'être un peu rude ^^
donc je me suis remis en route avec xajax avec donc ces saletés de délai : /
Pour ce qui est de la bdd ... j'utilise WampServer Version 2.2
Merci de ton aide
essayes avec ce scriptPHP_reponse_a_ajax.php pour voir le délai de réponse de ta BDD
<?php function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec); } $time_start = microtime_float(); //script php d'interro de la BDD, appelé par Ajax try { $bdd = new PDO('mysql:host=localhost;dbname=lol', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } // recup de la valeur envoyée par Ajax $idFrs=$_POST['idFournisseur']; $reponse = $bdd->query("SELECT * FROM fournisseur where idFrs='".$idFrs."'"); //un seul résultat donc pas besoin de boucle while //deplus avec la boucle tellle que tu avait fait le contenu de $infos était écrasé à chaque passage de la boucle $donnees = $reponse->fetch(); $time_end = microtime_float(); $time = $time_end - $time_start; $infos=$donnees['nomFrs']."<br />".$donnees['adresseFrs']."<br />Resulltat BDD en ".$time." microsec"; //envoi du resultat à Ajax echo $infos; ?>
donc c'est bon côté BDD, voir ce que ça donnes avec jquery-1.3.2.min.js
et avec ce script pour voir le temps que met Ajax pour avoir la réponse:
et avec ce script pour voir le temps que met Ajax pour avoir la réponse:
<script type="text/javascript"> $(document).ready(function() { $("#listeFrs").click(function(e) { var time_start = (new Date()).getTime(); id=$('#listeFrs').val(); $.post("scriptPHP_reponse_a_ajax.php", {idFournisseur: id}, function(data) { var time_end = (new Date()).getTime(); var duree_ajax=time_end - time_start; $('#infoFrs').html(data + '<br /> temps total ajax: '+duree_ajax+' µsecondes'); }); return false; }); }); </script>
Resulltat BDD en 0.018136 microsec
temps total ajax: 1034 µsecondes
le premier chiffre est en fait en secondes:
Resulltat BDD en 0.018136 secondes
temps total ajax: 1034 µsecondes
il y a effectivement un délai au niveau Javascript
- as tu fait l'essai avec jquery-1.3.2.min.js ?
- as tu fait un essai depuis un autre micro ?
- est ce que les autres pages se chargent en en temps "normal" ?
temps total ajax: 1034 µsecondes
le premier chiffre est en fait en secondes:
Resulltat BDD en 0.018136 secondes
temps total ajax: 1034 µsecondes
il y a effectivement un délai au niveau Javascript
- as tu fait l'essai avec jquery-1.3.2.min.js ?
- as tu fait un essai depuis un autre micro ?
- est ce que les autres pages se chargent en en temps "normal" ?
J'utilise la v1.7.2 minified.
Pas pu tester depuis un autre micro, toutes les autres pages, pourvu qu'il n'y ai pas d'ajax, se chargent bien il me semble.
1034 ùsecondes ... moi j'ai un delai d'au moins 0.5 secondes ... 50 fois plus ...
Pas pu tester depuis un autre micro, toutes les autres pages, pourvu qu'il n'y ai pas d'ajax, se chargent bien il me semble.
1034 ùsecondes ... moi j'ai un delai d'au moins 0.5 secondes ... 50 fois plus ...
alors fais un essai avec ce code sans jquery, de l'ajax codé normalement, chez moi j'ai une durée de 32 à 40 microsecondes:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" > <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <script type="text/javascript"> function makeRequest(url,id_lire,id_ecrire){ var time_start = (new Date()).getTime(); ///TEST var http_request = false; //créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('Abandon :( Impossible de créer une instance XMLHTTP'); return false; } http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire,time_start); } //affectation fonction appelée qd on recevra la reponse // lancement de la requete http_request.open('POST', url, true); http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); obj=document.getElementById(id_lire); data="idFournisseur="+obj.value; http_request.send(data); } function traitementReponse(http_request,id_ecrire,time_start) { var reponse=""; if (http_request.readyState == 4) { if (http_request.status == 200) { // cas avec reponse de PHP en mode texte: //alert(http_request.responseText); //chargement des elements reçus dans la liste var reponse=http_request.responseText; obj = document.getElementById(id_ecrire); //alert("ID a ecrire: "+id_ecrire+" Liste: "+reponse); var time_end = (new Date()).getTime(); //TEST var duree_ajax_classique=time_end - time_start; //TEST obj.innerHTML = reponse+'<br /> duree ajax classique '+duree_ajax_classique+' microsecondes';; } else { alert('Un problème est survenu avec la requête.'); } } } </script> </head> <body> <?php try { $bdd = new PDO('mysql:host=localhost;dbname=lol', 'root', ''); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } ?> <select multiple="multiple" size="20" name="listeFrs" id="listeFrs" onclick="makeRequest('scriptPHP_reponse_a_ajax.php','listeFrs','infoFrs');" > <?php $reponse = $bdd->query('SELECT idFrs,nomFrs FROM fournisseur'); while ($donnees = $reponse->fetch()) { ?> <option value="<?php echo $donnees['idFrs'];?>"><?php echo $donnees['nomFrs'];?></option> <?php } $reponse->closeCursor(); ?> </select> <br /> <div id="infoFrs"> </div> </body> </html>
je pense que tu as un pb avec ton micro, qq chose qui ralentit le javascript ???
si tu veux donnes moi l'adresse de ton site en MP j testerai depuis mon micro
si tu veux donnes moi l'adresse de ton site en MP j testerai depuis mon micro
Ben en fait c'est pas un site, c'est un logiciel interne de gestion pour mon entreprise d'accueil de fin de stage de DUT ^^
Je regarderai avec une autre machine dès que j'en aurai l'occasion.
Merci beaucoup pour ton aide en tout cas :)
Je regarderai avec une autre machine dès que j'en aurai l'occasion.
Merci beaucoup pour ton aide en tout cas :)
peut être le parefeu qui ralentit ?
ou l'affichage ?
ou l'affichage ?