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   -
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
-- 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>

19 réponses

Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
Quelqu'un peut m'aider s'il vous plaît ? : (
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
up .... aidez-moi s'il vous plaît : (
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
Personne ?
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
up
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
....
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
voila avec jquery ajax une solution qui fonctionne chez moi
<!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;
?>
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
ça marche ou pas ?
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
je regarde dessuite
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
Alors au premier essai, j'ai une erreur ligne 15 de scriptPHP_reponse_a_ajax
$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
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
: (
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
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>
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
J'ai un délai d'environ 0.5 à 1 seconde
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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 ?
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
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
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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;
?>
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
resultat en secondes:

Resulltat BDD en ".$time." secondes"
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
Désolé pour mon temps de réponse

Resulltat BDD en 0.023589 microsec
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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:

 <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>
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
Encore une fois désolé pour le délai, je n'ai pas eu accés ni à internet, ni à mon travail ce week end.
Merci de m'aider tout de même, voici le resultat du code précédent :

Resulltat BDD en 0.018136 microsec
temps total ajax: 1034 µsecondes

J'ai malgré tout ce délai qui persiste
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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" ?
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
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 ...
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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>
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci pour ton aide.
avec ce nouveau code ,
Resulltat BDD en 0.030474 microsec
duree ajax classique 1046 microsecondes

Mais le delai persiste. J'avais essayé aussi avant de poster ici, avec le même résultat.
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
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 :)
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
Ok, ça marche nikel sur les autres pc, c'est juste sur celui du boulot que ça bug. je sais pas trop pourquoi ... j'ai la même version de wamp, le code est strictement le même, ...
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
peut être le parefeu qui ralentit ?
ou l'affichage ?
0
Cocoy1 Messages postés 37 Date d'inscription   Statut Membre Dernière intervention   2
 
J'ai essayé avec les parefeu desactiver, pas de changement.
Qu'entends-tu par "l'affichage" ?

Quand je clique sur une rubrique, les infos mettent du temps a apparaitre. Pendant ce chargement, j'ai le curseur de la souris qui indique un chargement. (cercle bleu)
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
as tu essayé de "nettoyer" un peu le PC

en passant CCleaner par exemple
ou en regardant quels sontles applis qui sont ouvertes à l'allumage du PC
0