8791 sujets

Développement web côté serveur, CMS

Salut tout le monde.

Petite question. Y'a t'il une alternative à cette méthode :


echo "<table>";
$requette = "SELECT * FROM `table`";
$launch = mysql_query($requette);
while($val = mysql_fetch_assoc($launch)){
    echo "<tr>";
        echo "<td>cool</td>";
    echo "</tr>
}
echo "</table>";


Parce que la j'ai 18cellules par lignes et 1014lignes et ca prend trop top des plombes.

Une idée pour une alternative plus rapide ?

Rude
Modifié par ffwrude (16 Feb 2010 - 13:53)
Je dirais deux choses
1. Utilise l'output-buffering
2. Récupère la totalité de la requête et affiche le tout après
Ca marche je vais regarder si j'y comprend quelque chose. Je poste la soluce si j'y arrive. Sinon bah je reviendrai pleurer ici Smiley smile

Rude
Erratum. Ca prend toujours 3plombes sur FF mais pas sur opéra ni sur ie8.

FF met environ 40secondes pour m'afficher le tableau contre 2sec pour Opéra et IE


echo "<table>";
$requette = "SELECT * FROM `table`";
$launch = mysql_query($requette);
while($val = mysql_fetch_assoc($launch)){
    ob_start();
    echo "<tr>";
        echo "<td>cool</td>";
    echo "</tr>";
    ob_end_flush();
}
echo "</table>";

Modifié par ffwrude (15 Feb 2010 - 15:49)
Salut,

Tu peux toujours limiter la requête à n résultat. Également utilise les fonctions ob_get_flush et ob_start, car mine de rien, les echo prennent du temps.

EDIT : trop lent xD
Modifié par jo_link_noir (15 Feb 2010 - 15:42)
@Link:Ouais mais je dois laisser la possibilité d'afficher toutes les lignes d'un coup. Et la c'est vraiement trop long. Peut tu me donner un exemple avec ob-get_flush ?

C'est pas bon ce que j'ai mis dans l'exemple je crois.

@Quentin:
a écrit :
2. Récupère la totalité de la requête et affiche le tout après

Je suis pas sur d'avoir compris ce que tu entendais par la.


Rude
Modifié par ffwrude (15 Feb 2010 - 15:54)
Plop !

ffwrude a écrit :
C'est pas bon ce que j'ai mis dans l'exemple je crois.
Ben non ! Il faut faire le ob_start(); avant le while et le ob_end_flush(); après. Smiley cligne
Modifié par Heyoan (15 Feb 2010 - 16:11)
Plop Heyoan,

Bah écoute je viens de modifier comme tu m'as dit et j'ai toujours le même problème.

En fait ce qui se passe vraiement, c'est que quand j'éxecute ce code sur Firefox j'ai pour presque 1minute de chargement (ca freeze même à moitié). Pour 3seconde d'execution sur Chrome ou Opéra.
Ben je comprends pas. Avec ce code :
echo "<table>";
$var = 0;
ob_start();
while($var < 20000) {
    echo "<tr><td>cool</td></tr>";
	$var++;
}
ob_end_flush();
echo "</table>";
j'ai le même temps d'exécution (entre 2 et 3 sec.) sur Opera ou FF 3.5. Smiley hmm
Bah y'a qu'une cellule. La c'est immédiat.

essaye ca


<?php
	echo "<table>"; 
	$var = 0; 
	ob_start(); 
	while($var < 20000) { 
		echo "<tr>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "<td>cool</td>";
		echo "</tr>"; 
		$var++; 
	} 
	ob_end_flush(); 
	echo "</table>";
?>


FF plante presque. 1minute de chargement. 6secondes avec Opéra et 5 avec Chrome
C'est vrai que Firefox a l'air dépassé ! En même temps tu parlais de 1800 lignes et pas de 20000 et bien sûr il vaut mieux faire 1 seul echo que 20. Smiley biggrin
Bah merci parce que écrivant comme ca :


echo "
<td>cool</td>
<td>cool</td>
<td>cool</td>
";


C'est pas mal plus rapide. Au moins je peux scroller sans qu'il plante pendant qu'il construit le tableau. Je pensais pas que les echo successifs prenaient autant de temps.

Merci Smiley smile Je vais mettre ca en résolu mais j'aimerai bien savoir pourquoi FF met autant de temps par rapport aux autres navigateurs.

Rude
Modifié par ffwrude (16 Feb 2010 - 10:38)