IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[PHP-JS] lenteur application php


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut [PHP-JS] lenteur application php
    Bonjour,

    j'ai enfin réalisé (avec beaucoup d'aide extérieure), un menu vertical développable qui reste ouvert au bon endroit. Le problème, c'est qu'il est très très lent... j'ai beau regarder, je ne vois pas ce qui cloche...
    Le voici en action

    Voici le code de la partie menu intégrée dans la partie php. Elle récupère ses info d'une table de ma base de donnée sql.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    <?php 
     	require "class.database.php";	 
     
      // N° de page et de sous menu
    	if (empty($_GET["id_page"]))  $page=0;				 
    	else $page=$_GET["id_page"];		
    	if (empty($_GET["smenu"]))  $smenu=0;				 
    	else $smenu=$_GET["smenu"];			   
    ?>
     
    <script type="text/javascript">
    <!--
    function montre(id) 
    {
    	var d = document.getElementById(id);
    		for (var i = 1; i<=15; i++) 
    			if (document.getElementById('smenu'+i)) 
    				document.getElementById('smenu'+i).style.display='none';
    	if (d) 
    		d.style.display='block';
    }		  
     
     
    function start(){
    <?PHP
    	 if (!empty($smenu))	 echo "	montre(\"smenu".$smenu."\");";
    	 else							 echo "	montre(\"\");";
    ?>		 
    }
     
    window.onload = start;
     
    //-->
    </script>
     
     
    <!-- ---------------------------- MENU ---------------------------- -->		
    <table width="175"  align="left" border="0" cellpadding="0" cellspacing="0" background="img/i_menu/fd_menu.gif" >
      <tr>		
          <td><ul id="menu"> 
    <?php 
    	// selectionne tous les menuus "supérieurs"		
    	$sqlparent = "select * from pages where id_parent = '1'";
    	$queryp=new query ($sqlparent);
     
    	if (!$queryp->count() )
    		die("Echec de la requete SQL");
    	else
    	{  
    	   $i=1;							 
    	    // poru chacun de ces menun sup, on cherche les "enfants"
    		while ($row	= $queryp->fetch()){
    		$i++;
    			$sqlenfant = "select * from pages where id_parent = ".$row['Id_page']."";
    			$querye=new query ($sqlenfant);
    			if ($querye->count())
    			{		
    				$rowe	= $querye->fetch();
     
    				echo("<li class=\"puce_noeud\"><a href=\"?smenu=$i&id_page=".$row["Id_page"]."\" onclick=\"javascript:montre('smenu".$i."');\">".$row["Titre"]."</a>\n");				
    				echo("<div id=smenu".$i."><ol>\n");
    				do
    				{
    					echo("<li class=\"puce_sous_cat\"><a href=\"?smenu=$i&id_page=".$rowe["Id_page"]."\">".$rowe["Titre"]."</a></li>\n");
    				}
    				while ($rowe = $querye->fetch());
    				echo("</ol></div></li> \n<div class=\"separateur\"></div>\n\n");
    			}	 
    			else
    				echo("<li class=\"puce_noeud\"><a href=\"?smenu=$i&id_page=".$row["Id_page"]."\">".$row["Titre"]."</a></li>\n<div class=\"separateur\"></div>\n");				
    		}
    	}
    	?>
    	</ul></td>
      </tr>
    </table> 						   
    <!-- ---------------------------- MENU ---------------------------- -->
    et voici le fichier class.database.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
     
    <?PHP 	if (eregi("class\.", $_SERVER["PHP_SELF"]))  die ("Access Denied");
     
    //-------------------------------------------------
    //----- VERSION : 2.1  --   QM 	
    //-------------------------------------------------		
     
    if (!defined('ERRORS_NEED_ADMIN')) define('ERRORS_NEED_ADMIN', 0);	// error viewed only by admin
     
    /*			  
    
    global :	 $isadmin:				
    
    function db_connect	($dbhost, $dbuser, $dbpass, $dbname, $dbrequired=1) 
    function db_close	($dblink)
    function db_error	($query="", $error="", $die=0, $redirect="")
    	
    class query	
    	var $result = 0; 
    	var $row = array(); 
    	function query($query =  "") 
    	function count() 
    	function goto($num=0) 
    	function fetch($champ =  "") 
    	function Get($champ) 
    	function Get_Auto()
    
    */			  
    // =====================================================================================================
    // =====================================================================================================
     
    function db_connect($dbhost, $dbuser, $dbpass, $dbname, $dbrequired=1)
    {  				 
    	$dblink=0;
    	if(empty($dbhost) || empty($dbuser) ||  empty($dbname)) 
    		db_error ("Could not connect : missing data..","",$dbrequired);	
    	elseif (!@$dblink = mysql_connect($dbhost, $dbuser, $dbpass))
    		db_error ("Could not connect server",mysql_error(),$dbrequired);
    	elseif (!@mysql_select_db($dbname))
    		db_error ("Could not select database",mysql_error(),$dbrequired);
    	return $dblink;  
    }        
    //---------------------------------------------------------------------------
    function db_close($dblink)
    {
    	if (!empty($dblink))
    		mysql_close($dblink);
    }        
    //---------------------------------------------------------------------------
    function db_error($query="", $error="", $die=1)
    {
    	global $isadmin;
    	if (!headers_sent())
    	{
    	 ?>	<html><head>
    		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    		<title>db.error</title>
    		</head>
    		<body>
    	 <?
    	}			
    	if(ERRORS_NEED_ADMIN==0) //|| !empty($isadmin)) // admin -> error description
    	{
    		?>				
    		<!-- ------------------------------------------------------------ -->			
    		<style type="text/css">
    		<!--
    		.style156 {	color: #CCCC33;	font-weight: bolder;font-family: Arial, Helvetica, sans-serif;}
    		.style157 {color: #FFFFFF; font-family: Arial, Helvetica, sans-serif; font-size: 12px; }
    		.style158 {color: #FFFFFF; font-family: Arial, Helvetica, sans-serif; font-size: 11px; }
    		-->
    		</style>
    		<!-- ------------------------------------------------------------ -->		
    		<table width="500" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#000000">
    		<tr><td><table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#990033">
    		<tr><td colspan="2"><div align="center" class="style156">MySQL ERROR </div></td></tr>
    		<tr><td width="100"><span class="style157">QUERY</span></td>
    		<td><span class="style158"><? if (!empty($query)) echo $query?></span></td></tr>
    		<tr><td width="100"><span class="style157">MySQL ERROR </span></td>
    		<td><span class="style158"><? if (!empty($error)) echo $error?></span></td>
    		</tr></table></td></tr></table>			
    		<!-- ------------------------------------------------------------ -->		
    		<?
    	}
    	else
    	{
    		?>
    		<style type="text/css">
    		<!--
    		.style156 {
    			color: #CCCC33;
    			font-weight: bolder;
    			font-family: Arial, Helvetica, sans-serif;
    		}
    		-->
    		</style>		
    		<table width="450" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#000000">
    		<tr><td><table width="100%"  border="0" cellspacing="1" cellpadding="0">
    		<tr><td bgcolor="#990033"><div align="center"><span class="style156">db error</span></div></td>
    		</tr></table></td></tr></table>
    		<?	
    	}	
    	if ($die)
    	{		   
    		echo "</body></html>";
    		exit;
    		die("");
    	}
    }
     
    // =====================================================================================================
    // =====================================================================================================
    class query
    { 
    	var $result = 0; 
    	var $row = array(); 
     
    	function query($query ="") 
    	{ 
    		if(!empty($query) && (!$this->result = mysql_query($query))) 
    			db_error($query,mysql_error(),1);  
    		else
    			return 1;
     	} 
     
    	function count() 
    	{               
    		return @mysql_num_rows($this->result); 
    	} 
     
    	// Pointe vers l enregistrement nr # 
    	function goto($num=0) 
    	{ 
    		@mysql_data_seek($this->result,$num);     
    	} 
     
    	// Récupère l'enregistrement suivant dans la base sous forme de tableau quand
    	// il n'y a pas de paramètre. Sinon, c'est la valeur du champ lui même.
    	// si l'appel n'a jamais été fait, c'est le premier enregistrement
    	function fetch($champ =  "") 
    	{ 
    		$this->row = mysql_fetch_array($this->result,MYSQL_ASSOC);
    		return  $champ?$this->row[$champ]:$this->row;  
    	} 
     
    	// Donne la valeur du champ. (d'abord faire fetch)
    	function Get($champ) 
    	{            
    		return $this->row[$champ]; 
    	} 
     
    	// Donne la valeur du dernier champ autoincrémenté
    	// Si une requête dans un autre objet a été faite avant
    	// cette fonction retourne la valeur de cet objet
    	function Get_Auto()
    	{
    		return mysql_insert_id();
    	}
    } 
    ?>
    Merci d'avance

    Gregius

  2. #2
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut

    Franchement j'ai regardé le code en diagonale mais tu as regardé que ça ne vienne pas des requêtes SQL tout simplement ?

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut
    salut,

    Elles sont correctes et assez simples à priori... Qu'est-ce qui pourrais faire que ce soit si lent?
    j'ai vraiment l'impression que c'est le javascript qui est lent...

  4. #4
    Fabouney
    Invité(e)
    Par défaut
    Bonjour,

    très honnetement, je doute que ton javascript fasse ralentir ton script, pas avec ce que tu fait tout du moin. de même pour tes requêtes qui retourne à chaque fois qu'un seul enregistrement, donc logiquement très rapide.
    quand tu dit lent, tu peux être un peu plus précis, 3 secondes ? 20 secondes ? 3 minutes ? (oh my god ).

    tu taff en local, ou sur un hebergeur, si oui lequel.

    Bon courage.

  5. #5
    Membre Expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Par défaut
    heu 2 ou 3 trucs :
    il faut cliquer pour que le sous-menu apparaisse (c'est pas top) et pire la page se réactualise à chaque fois et il faut RE-passer le curseur sur le menu que l'on vient de cliquer pour que le sous-menu réapparaisse du coup je ne vois pas la "lenteur" dont tu parles.
    dans ton menu en diagonale au milieu, "publication" est en gras et pas les autres on dirait, c'est normal?
    la fonction montre que tu utilises marche nickel. Le problème est ailleurs.
    Quand tu fais un SELECT (c'est valable pour tous les langages) mets le nom des champs, évite le *
    utilise <?php et non <? ou <?PHP
    dernier point : c'est la première fois que je vois qu'on ouvre un if quelque part, qu'on ferme la balise php pour afficher du code HTML (je n'ai pas beaucoup d'expérience mais il n'empêche que ça me parait fort bizarre : a voir avec plus expérimenté que moi en la matière )

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut
    quand tu cliques sur le menu, tu as une page d'intro donc, ça se justifie que le tout soit rechargé... avec le menu ouvert...
    mais c'est justement l'ouverture du menu qui est méga lente... faut attendre environ 4 seconde après que la page soit chargée avant que le menu s'ouvre...
    je vais changer les * et le <?PHP

    Pour le dernier point, c'est pas moi qui l'ai fait.. j'sais pas si ça pose problème...

    Je vous tiens au courant

    Merci

  7. #7
    Membre émérite
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Par défaut
    Bah moi je dois être polio parce que je le trouve pas ton menu... .. .

    par contre tu as un beau...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Notice: Undefined variable: userdata in /....../intranet/intranet.php on line 45
     
    Notice: Undefined variable: userdata in /....../intranet/intranet.php on line 47
     
    Notice: Undefined variable: userdata in /....../intranet/intranet.php on line 49
     
    Notice: Undefined variable: userdata in /....../intranet/intranet.php on line 52
     
    Notice: Undefined variable: phpbb_root_path in /....../intranet/intranet.php on line 60
    Sur ta page d'accès intranet... .. .

    @ tchaOo°

    ps : pour les fermeture/ouverture des balises php pour l'affichage de html ça ne pose aucun problème... au contraire... bien que ça soit moins clair visuellement c'est plus rapidement interprété par php (à partir du moment ou tu ferme les balises php ne se pose plus de questions jusqu'a ce que tu les réouvre)

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut
    ça va beaucoup mieux, j'ai changé les <? et les <?PHP en <?php mais surtout, j'ai enlevé les lignes de codes pour estat (statistiques du site)... ça ralentissait tout... ça va beaucoup mieux pour le premier menu, je n'ai pas changé les pages des autres menu...
    Par contre, il y a encore un mini délai entre le moment ou il affiche tout le menu fermé et le moment où il l'ouvre au bon endroit...
    Ne serait-il pas possible qu'il envoie tout en une fois? Il n'y a pas moyen de lui dire de charger toute la page (menu.php) avant de l'afficher?

    Merci

    Greg

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP-JS] audit application php
    Par jeff_! dans le forum Langage
    Réponses: 1
    Dernier message: 04/05/2007, 22h00
  2. Réponses: 5
    Dernier message: 01/10/2006, 16h55
  3. application php+mysql de gestion executable
    Par kephrem dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 03/02/2006, 09h55
  4. [EasyPHP] Probleme de deployement d'une application PHP sous linux
    Par stomerfull dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 16/01/2006, 15h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo