JeuWeb - Crée ton jeu par navigateur
[Gestion inventaire] ID unique, ou non? - 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 : [Gestion inventaire] ID unique, ou non? (/showthread.php?tid=2829)

Pages : 1 2 3 4 5


RE: [Gestion inventaire] ID unique, ou non? - Satevis - 08-08-2008

J'ai tester votre méthode et elle est plus lente que le foreach :glace:.
Pour 3 fois 100 000 tours :
foreach() => ~2.9 secondes
votre méthode arrayKeys avec un while() => ~5.3 secondes
votre méthode arrayKeys avec un for() => ~5.8 secondes
While() avec list() => ~8.4 secondes


RE: [Gestion inventaire] ID unique, ou non? - Satevis - 08-08-2008

C'est surement dû au fait que leur test est fait sur du PHP4, il y a ce qui semble êtres les specs de la machine sur cette page http://www.php.lt/benchmark/.
Et je me souviens avoir lu sur le net que le foreach() avait été considérablement amélioré entre le 4 et le 5 comme d'autre truc mais je sais plus quoi Smile.


RE: [Gestion inventaire] ID unique, ou non? - z3d - 09-08-2008

Je n'ai pas fait de benchmark personnel mais il a toujours été ainsi la boucle foreach a un processus de traitement qui est bien plus long qu'un while ou un for même en php5.

Avec un foreach on peut même aller jusqu'un dépassement de mémoire d'après ce benchmark.

Concernant l'optimisation, je suis d'accord qu'il faut y faire attention mais pensez à l'optimisation pendant la phase de modélisation, c'est tout simplement se tirer une balle dans le pied.


RE: [Gestion inventaire] ID unique, ou non? - Satevis - 09-08-2008

Benchmark Boucle: foreach() pour un parcours simple, pourquoi pas mais quelqu'un l'a t-il déjà utilisé ou vu utilisé ? Le foreach est intimement lié au tableau, et son range(0, $cpt) fausse le test puisque dans le cas des autres structure il n'y à pas la création d'un tableau de 3 000 000 de cases (m'étonne que ça pète la mémoire :x) ou de 100 000 dans le cas soft.

Benchmark Parcours de tableaux: Son test est faux, j'ai eu le même truc lors de mes tests. La fonction each() avance le pointeur interne du tableaux ce qui fait que lors des 99 999 autre passage la condition du while est à false donc forcément ça va plus vite Smile, il faut penser à ajouter un reset($tableau), de plus en regardant bien on peut voir que l'utilisation du for() -1er cas- est légèrement plus lente que le while du 5éme cas, le foreach étant plus rapide que ces deux là avec une nette amélioration et un while avec les fonction list() et each() serait CENT fois plus rapide que le foreach ? Un peu gros non ?

Et parce ce qu'un test vaut mieux que des milliers de mots, les scripts ainsi que les sources des mes fichiers de test son ici : Benchmark.


RE: [Gestion inventaire] ID unique, ou non? - Satevis - 09-08-2008

Effectivement les 10 000 sont le nombre de case du tableau j'ai lu trop vite et mal interprété Smile mais le problème est toujours existant, en haut du document il indique qu'il répète le test 3 000 000 donc le reset() est obligatoire sinon each() renvois false 2 999 999 fois d'où le temps extrêmement bas du while/list/each.