JeuWeb - Crée ton jeu par navigateur
Problem dans une fonction attaque - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Problem dans une fonction attaque (/showthread.php?tid=905)

Pages : 1 2 3 4


RE: Problem dans une fonction attaque - pascal - 06-03-2007

Sephi-Chan a écrit :Pardonne ma curiosité mais, qu'est ce qui constitue les goulots dans un script ? Smile

principalement le SQL :
_ plein de connexions / deconnexions
_ plein de requetes inutiles
_ des requetes dans une boucle

le reste c'est souvent des points de détail.

A+

Pascal


RE: Problem dans une fonction attaque - Sephi-Chan - 06-03-2007

Et faire une requête qui joint (outer join principalement) 4 ou 5 tables, ça pompe beaucoup ?

A combien estimes-tu le nombre de requête maximale par page ?
J'ai conscience que ce n'est pas forcément facile à chiffrer étant donné que les requêtes renvoient plus ou moins de lignes, mais je parle d'une moyenne.

Un peu hors sujet mais... Qu'apporteraient la prise en charge de clés étrangères par MySQL, ça accélère beaucoup les opérations de jointures ?


Sephi-Chan


RE: Problem dans une fonction attaque - denisc - 06-03-2007

Citation :Bench 10 variables sur 100000 interprétations de chaine :
$a=10
$b='test B'
$c=1/3
$d="test D"
$e=true
$f=false
$g=htmlentities('<B>Coucou</B>')
$h=1e26
$i='coucou '.'test I';
$j=$a.' '.$b." $c $d $e $f $g $h $i"
$res=concaténation des 10 variables, avec un '-' entre chacune d'elles

doubles quotes : $res="$a-$b-$c-$d-$e-$f-$g-$h-$i-$j"; = 1.85771393776
sprintf : $res=sprintf('%d-%s-%f-%s-%b-%b-%s-%e-%s-%s',$a,$b,$c,$d,$e,$f,$g,$h,$i,$j); = 2.51651191711
simples quotes : $res=$a.'-'.$b.'-'.$c.'-'.$d.'-'.$e.'-'.$f.'-'.$g.'-'.$h.'-'.$i.'-'.$j; = 1.98748111725

avec ce code :
Code PHP :
<?php 
Bench 10 variables sur 100000 interprétations de chaine
:<br>
$a=10<br>
$b='test B'<br>
$c=1/3<br>
$d="test D"<br>
$e=true<br>
$f=false<br>
$g=htmlentities('&lt;B&gt;Coucou&lt;/B&gt;')<br>
$h=1e26<br>
$i='coucou '.'test I';<br>
$j=$a.' '.$b." $c $d $e $f $g $h $i"<br>

$res=concat&eacute;nation des 10 variables, avec un '-' entre chacune d'elles<br><br>

<?php

/**
*
*
* @version $Id$
* @copyright 2007
*/
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}


echo '
doubles quotes : '.htmlentities('$res="$a-$b-$c-$d-$e-$f-$g-$h-$i-$j";').' = ';
$time_start = microtime_float();
for($i=0;$i<100000;$i++){
$res="$a-$b-$c-$d-$e-$f-$g-$h-$i-$j";
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo $time."<br>\n";


echo '
sprintf : '.htmlentities('$res=sprintf(\'%d-%s-%f-%s-%b-%b-%s-%e-%s-%s\',$a,$b,$c,$d,$e,$f,$g,$h,$i,$j);').' = ';
$time_start = microtime_float();
for(
$i=0;$i<100000;$i++){
$res=sprintf('%d-%s-%f-%s-%b-%b-%s-%e-%s-%s',$a,$b,$c,$d,$e,$f,$g,$h,$i,$j);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo
$time."<br>\n";



echo
'simples quotes : '.htmlentities('$res=$a.\'-\'.$b.\'-\'.$c.\'-\'.$d.\'-\'.$e.\'-\'.$f.\'-\'.$g.\'-\'.$h.\'-\'.$i.\'-\'.$j;').' = ';
$time_start = microtime_float();
for(
$i=0;$i<100000;$i++){
$res=$a.'-'.$b.'-'.$c.'-'.$d.'-'.$e.'-'.$f.'-'.$g.'-'.$h.'-'.$i.'-'.$j;
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo
$time."<br>\n";
?>



RE: Problem dans une fonction attaque - Sephi-Chan - 06-03-2007

Merci les chiffres Denisc, ça à l'avantage d'être objectif.

Inconvénient, ce genre de truc ne veut, à mon sens, rien dire, sauf peut-être pour les plus pointilleux des pointilleux. Même si la programmation fait appel à la logique et aux maths, il faudrait voir à ne pas tout quantifier aussi précisément.

Chacun son truc, je l'accorde, mais de là à s'embêter à faire un code dégueulasse pour gagner 2 secondes sur 10000 itérations...

Le mieux c'est d'utiliser les choses correctement et réfléchir, voilà tout. Certes ces chiffres peuvent à la limite influencer un peu à choix, mais rien de plus.


Sephi-Chan, les chiffres font perdre le charme du codage...


RE: Problem dans une fonction attaque - denisc - 06-03-2007

l'utilisation d'index + clés étrangère permet de gagner entre 75% et 95% dans les temps de requêtes contenant des jointures.

Sur M$SQL, j'ai même réussi a obtenir un gain de 97,5% en rajoutant l'option CROSS JOIN dans ma requete... Mais ça doit pas exister sur MySQL ce genre d'options!

Pour ceux qui ont des problèmes de temps de requête, je leur propose d'utiliser le logiciel de chez QUEST, SQL Tuning... Complètement fonctionnel pendant 7 jours, c'est grace à lui que j'ai gagné mes 97,5% de temps... Juste en ajoutant une bête option !!!
Il est compatible avec MSSQL, Oracle, Sybase, DB2 et mySQL... Avec certification pour chacun de ces SGBD. Excellent et TREEES CHER (4800€)


RE: Problem dans une fonction attaque - Sephi-Chan - 06-03-2007

75% à 95% !!!? :wow:

Ca me donne envie de passer à PostgreSQL.

Les autres SGBD sont payants (chers) et peu abordable car accessibles seulement sur des serveurs dédiés (ça rajoute du coût ^^).

Dommage... Sur serveur mutalisé, il n'y à presque que MySQL de disponnible.


Sephi-Chan


RE: Problem dans une fonction attaque - denisc - 06-03-2007

vi...Mais ça marche aussi avec mysql Big Grin


RE: Problem dans une fonction attaque - Sephi-Chan - 06-03-2007

Gné ? Les clés étrangères fonctionne avec MySQL ?

Dans PHPmyAdmin, l'interface graphique ne le permet pas il me semble. Va falloir que je fouille un peu la doc.


Sephi-Chan


RE: Problem dans une fonction attaque - denisc - 07-03-2007

... Les clés étrangères, je ne sais pas, je parlais de SQL Tuning de QUEST, qui peut aussi optimiser les requêtes mySQL...


RE: Problem dans une fonction attaque - Plume - 07-03-2007

Oui, depuis MySQL 5.0 les clés étrangères sont gérées, ainsi que la gestion des domaines de valeurs ! Ca claque cette version ! Tongue