Genova a dit:Sur une boucle d'un million d'itération dans ce cas![]()
Ca revient au même, et aucune des deux expressions n'est optimisée par rapport à l'autre.
Je suis assez d'accord avec ton raisonnement.FloBaoti a dit:Sans vouloir dire de bétises, le point d'exclamation remplace le mot clé "not".
Ce qui fait revient à un test:
non expression == vraie
au lieu de:
expression == fausse
A priori, il faudrait préférer la deuxième possibilité. J'ai l'impression que ça fait une opération en moins (prendre le contraire de l'expression).
Exact (si nécessaire) !Genova a dit:Cependant comparer à FALSE en utilisant l'opérateur === est une bonne habitude à prendre (histoire d'exlure les NULL '' et autres 0)
C'est mon coté perfectionniste, j'm'intéresse aux moindres détails parce que j'ai déjà tout compris aux optimisationsGenova a dit:Un développeur qui passera son temps à se demander si un ! est plus lent qu'un == FALSE n'aura rien compris aux optimisations du language PHP.
salva a dit:Eh ben![]()
Ps structure ton post qu’il soit plus clair à lire.
$nb = 1000000;
$var = true;
for($i=0;$i<$nb;$i++)
if(!isset($var))
echo '';
$nb = 1000000;
$var = true;
for($i=0;$i<$nb;$i++)
if(isset($var)==FALSE)
echo '';
$nb = 10000000;
$var = true;
for($i=0;$i<$nb;$i++)
if(!isset($var))
echo '';
$nb = 10000000;
$var = true;
for($i=0;$i<$nb;$i++)
if(isset($var)==FALSE)
echo '';
FloBaoti a dit:Sympa ces infos Bellegarde-webb :wink:
Tu n'es plus interessé par ce domaine là ?
<?php
$start = microtime(true);
$nb = 10000000;
$var = true;
for($i=0;$i<$nb;$i++)
if(!isset($var))
echo '';
$end = microtime(true);
echo ($end - $start) . '<br />';
$start = microtime(true);
$nb = 10000000;
$var = true;
for($i=0;$i<$nb;$i++)
if(isset($var)==FALSE)
echo '';
$end = microtime(true);
echo ($end - $start) . '<br />';
?>
2.30829820633
2.3725259304
<?php
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$start = microtime_float();
$nb = 10000000;
$var = true;
for($i=0;$i<$nb;$i++)
if(!isset($var))
echo '';
$end = microtime_float();
echo ($end - $start) . '<br />';
$start = microtime_float();
$nb = 10000000;
$var = true;
for($i=0;$i<$nb;$i++)
if(isset($var)==FALSE)
echo '';
$end = microtime_float();
echo ($end - $start) . '<br />';
?>
lol PHP 4 obsolète ! ..Genova a dit:PHP4 est pratiquement obsolète, il faut benchmarquer sur des versions à jour.
J'en déduis que PHP 5 est aussi obsolète ..Genova a dit:Mon script fonctionne, mais prend en paramètre de microtime() un true (cf la doc PHP, ce paramètre est apparut en PHP5), ce qui explique pourquoi il ne tourne pas sous PHP4.
Le script que tu indique est copie conforme à ce que j'ai fait.Genova a dit:Voici une version qui marchera pour PHP4, je te laisse le loisir de tester (bien entendu le temps d'execution dépendra de la machine après, mais le rapport d'écart restera le même).
Genova a dit:De toute façon c'est logique, en regardant ton benchmark on voit que la différence sur 10 000 000 d'itération est de ... 3 secondes ! Pas besoin de chercher bien loin pour voir qu'une simple instruction de bas niveau du langage ne peut pas engendrer un écart aussi énorme, donc tu as du faire une erreur dans ton code. Si ça ne te dérange pas de poster ton script ici que je regarde pourquoi il y a autant de différence ?
Alors tu douterais de ton benchmark ?Genova a dit:3 secondes sur 10 000 000 d'itérations sur une simple instruction du type == ou ! c'est un chiffre qui n'est pas fiable, alors que le même script executé chez moi ne donne que 0.1 secondes. Désolé de douter du sérieux de ton benchmark.
Oui beaucoup d'oubli, c'est pour ça que je trouve que c'est un peu culotté. :xMagicYoyo a dit:Vous avez oublié de comparer vos hardwares et la longueur de votre *bip*.
Non toi tu débarques en disant ça (cf message plus haut) :et que je suis complètement dépassé mais je ne débarque pas en disant ça c'est faux ! Mais l'erreur est humaine.
ce qui est bien pire, puisque contrairement à toi j'ai pris la peine de t'expliquer sur quoi se basait mes tests. Pas toi qui me sort des chiffres d'on ne sait pas où. Inutile de me rappeler que tu ne développes pas, j'ai eu tout le loisir de le comprendre à travers tes réponses. Bien entendu tu ne t'y connais pas, mais quand un développeur vient t'expliquer que ton benchmark est faux tu ne peux pas t'empêcher de chercher à tout prix à montrer que c'est le développeur qui se trompe :roll:ps: je n'ai pas regardé ton script, parce que je sais que le mien est bon.
:lol: tu me donnes l'autorisation de poster cette annerie sur bashfr s'ils prennent les quote de forum ?Et oui PHP 5 est obsolète, parce qu'il ne s'agissait que d'une transition au PHP 6.
mdr...Genova a dit:Non toi tu débarques en disant ça (cf message plus haut) :et que je suis complètement dépassé mais je ne débarque pas en disant ça c'est faux ! Mais l'erreur est humaine.
ce qui est bien pire, puisque contrairement à toi j'ai pris la peine de t'expliquer sur quoi se basait mes tests. Pas toi qui me sort des chiffres d'on ne sait pas où.ps: je n'ai pas regardé ton script, parce que je sais que le mien est bon.
lol oui je ne suis pas développeur. Je sais à peine ce que c'est que le PHP.Genova a dit:Inutile de me rappeler que tu ne développes pas, j'ai eu tout le loisir de le comprendre à travers tes réponses. Bien entendu tu ne t'y connais pas, mais quand un développeur vient t'expliquer que ton benchmark est faux tu ne peux pas t'empêcher de chercher à tout prix à montrer que c'est le développeur qui se trompe :roll:
Mais avec grand plaisir.Genova a dit::lol: tu me donnes l'autorisation de poster cette annerie sur bashfr s'ils prennent les quote de forum ?Et oui PHP 5 est obsolète, parce qu'il ne s'agissait que d'une transition au PHP 6.
Il semblerait que tu n'aies pas tout lu....Genova a dit:Maintenant je ne vois qu'un seul moyen de vérifier si effectivement ton benchmark est bon : donne moi ton code que je puisse tester en plus du miens, histoire de voir si ce n'est pas le cas où il merde (les erreurs sont humaines),
Ce n'est pas toi qui disait que PHP 5 était totalement ré écrit ?Genova a dit:et s'il merde pas pourquoi il donne un temps totalement différent du miens.
Tu fais exprès, hein ? Allé c'est pas possible autrement ?!Genova a dit:Comme tu dit, beaucoup de blabla, mais ça fait trois messages que j'attend toujours que tu postes ton code qui apparemment marche parfaitement contrairement au mieux![]()
Tout simplement parce que j'ai pris le temps de faire le benchmark moi même et que les résultats ne collent pas ... par contre je comprend pas pourquoi tu persistes à prétendre que tu as raison et que dès que je te demande ton script tu te contentes de répondre par "Tu fais exprès, hein ? Allé c'est pas possible autrement ?!" ou par "j'ai utilisé en gros le même script que toi" enfin tu vois.Comment peut tu savoir que mon bench est faux sans en avoir le code ?
pfff, il te faut un dire plus récent ?Genova a dit:Super la citation que tu me files datant de quasiment 1 ans et demi :roll: (sujet dans lequel on parle des hébergeurs qui sont pas encore en PHP5 alors que la majorité des hébergeurs le sont aujourd'hui). Si tu estimes que PHP5 est une version de transition parce qu'un modérateur te l'as dit tant mieux. Le développement PHP c'est mon métier et mon hobbie depuis plusieurs années, donc pour ma part je sais de quoi je parle :roll: Enfin bon je vais arréter de débattre sur l'utilité ou pas de PHP5 avec un non développeur, c'est ridicule. C'est comme si je débattais de marques de voitures sans rien connaître d'autres que renault.
Ah oui ! Humm .. donc c'est mon bench qui est faux.. Humm je vois, je vois.Genova a dit:Tout simplement parce que j'ai pris le temps de faire le benchmark moi même et que les résultats ne collent pas ...Comment peut tu savoir que mon bench est faux sans en avoir le code ?
:?: :?: :?: ah ben nan tu ne le fais pas exprès !Genova a dit:par contre je comprend pas pourquoi tu persistes à prétendre que tu as raison et que dès que je te demande ton script tu te contentes de répondre par "Tu fais exprès, hein ? Allé c'est pas possible autrement ?!" ou par "j'ai utilisé en gros le même script que toi" enfin tu vois.
Avec plaisir. Je suis impatient d'avoir de tes nouvelles parce que sincèrement tu m'as pris en grippe pour vraiment rien... :roll:Genova a dit:Si ça se trouve j'ai fait une connerie quelque part, si j'ai tort je l'admettrai, mais je tiens simplement à le vérifier. File moi le code source que tu as utilisé pour sortir tes chiffres, et je lancerai les deux programmes (le tiens et le miens), et je verrai d'où sort le résultat bizare. Je ferai le test sous PHP4 et PHP5 (j'ai les deux versions chez moi), et je te sort tous les résultats que tu veux ce soir de toute façon. Je pousserai même le vice en refaisant les benchmark en utilisant une classe de benchmark officielle et en la testant sous PHP4 et PHP5, histoire que tu me dises pas que c'est mon code qui plante.
A ce soir :twisted:
semble ne pas savoir de quoi elle parle, ou du moins a fait une erreur sur ce coup là. Car les ajouts de PHP6 je peux te les citer, et sans aller les chercher sur internet, et en aucun cas la POO de PHP6 sera une évolution (mise à part l'ajout des namespace, ajout qui je précise vient tout juste d'être votéPHP5 est une version de transition avant PHP6, qui sera un véritable langage objet.
Résultat calcul 1 : 7.69019498825
Résultat calcul 2 : 9.74630212784
Résultat calcul 1 : 2.96072001457
Résultat calcul 2 : 3.21549892426
<?php
// Classe pour les benchmarks
class Benchmark
{
var $start;
var $end;
function Benchmark()
{
$this->start();
}
function get_time()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
function start()
{
$this->start = $this->get_time();
}
function end()
{
$this->end = $this->get_time();
}
function result($str)
{
$this->end();
echo 'Résultat ' . $str . ' : ' . ($this->end - $this->start) . '<br />';
}
}
// Initialisation des deux variables qui nous interessent
$nb = 10000000;
$var = true;
// Premier calcul
$bench = new Benchmark();
for($i=0;$i<$nb;$i++)
if(!isset($var))
echo '';
$bench->result('calcul 1');
// Second calcul
$bench = new Benchmark();
for($i=0;$i<$nb;$i++)
if(isset($var)==FALSE)
echo '';
$bench->result('calcul 2');
?>
Non, simplement tu disais :Genova a dit:J'ai l'impression que tu te moques de moi en fait, tu me renvoies vers un message de la même personne. Encore heureux qu'il se contredit pas entre ses deux messages :lol:
Donc, tu vois bien que c'était idiot de jouer sur la date.Genova a dit:Super la citation que tu me files datant de quasiment 1 ans et demi :roll:
Ah enfin !Genova a dit:Bref fin du blabla voilà la série de test que tu attends :
Sous PHP4 :
Résultat calcul 1 : 7.69019498825
Résultat calcul 2 : 9.74630212784
Sous PHP5
Résultat calcul 1 : 2.96072001457
Résultat calcul 2 : 3.21549892426
Donc effectivement sous PHP4 le temps d'écart est assez important, tu avais raison de ce côté là. J'avais raison aussi puisque le temps sous PHP5 est celui que j'avais donné. Dans tous les cas ce benchmark confirme largement ce qui a été dit plus haut : PHP4 est obsolète, la différence d'optimisation du moteur n'est pas comparable, il y a casiment 300% de gain de vitesse.
Simplement parce que j'étais sûr de moi et j'avais raison de l'être...Genova a dit:Dans tous les cas si je t'ai pris en grippe, c'est pour deux raisons :
1) Lorsque j'ai prétendu que ton benchmark était faux tu as même pas cherché à savoir s'il l'étais ou pas
Entendons nous, moi je considère et je l'entends comme ça : PHP 5 est pour moi une version de transition.Genova a dit:2) Les différentes conneries racontées sur PHP5 dans ce sujet : il faut savoir de quoi on parle avant de dire que PHP5 est une version de transition.
Nous sommes d'accord.. vive le progrès !Genova a dit:Bref fin du débat pour ma part, vive la rapidité de PHP5![]()
➡️ Offre MyRankingMetrics ⬅️
pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)
Voir les détails ici