CSS-GENERATOR

Palleas_44 Messages postés 130 Date d'inscription lundi 12 décembre 2005 Statut Membre Dernière intervention 19 avril 2009 - 2 juin 2009 à 22:50
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015 - 8 juin 2009 à 10:17
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50106-css-generator

kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
8 juin 2009 à 10:17
if($lColor > 1) {
if($color[0] == '#') {
$color = substr($color, 1);
}
}

>>>

if($lColor > 1) {
if($color[0] == '#') {
$color = substr($color, 1);
$lColor--;
}
}

On remarquera la pertinence de l'intervention de Palleas qui avait tant à nous apprendre... .. .

@ tchaOo°
valneandre Messages postés 35 Date d'inscription mardi 7 novembre 2006 Statut Membre Dernière intervention 18 septembre 2009
8 juin 2009 à 08:47
Code intéressant, ayant suscité des commentaires intéressants. merci.
cs_BlackDragon Messages postés 16 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 11 août 2009
4 juin 2009 à 16:15
héhé effectivement kankrelune, merci pour ton exemple, c beaucoup plus clair maintenant dans mon esprit :P
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
4 juin 2009 à 14:21
D'accord =) !

Merci Kankrelune pour ce conseil, j'utiliserais cette méthode dorénavant pour parcourir mes tableaux numériques !
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
4 juin 2009 à 12:14
petite erreur dans le code au niveau du foreach mais le classement reste le même...

for() : 0.0468 s
foreach() : 0.1104 s
while(isset()) : 0.0324 s
while(list() = each()) : 0.3175 s

test sur un tableau de 100.000 entrées

>>>>>>>>>>>>>>>

<?php

function getTime()
{
list($usec, $sec) = explode(' ', microtime());
return ((float)$sec + (float)$usec);
}
$testTab = array_pad(array(),100000,0);
echo 'for() : ';
$execStartTime = getTime();
for($i=0,$len=count($testTab);$i<$len;++$i)
{
$testTab[$i] = 1;
}
$execStopTime = getTime();
echo number_format($execStopTime - $execStartTime, 4, '.', ',').' s
foreach() : ';
$execStartTime = getTime();
foreach($testTab as $key => $val)
{
$testTab[$key] = 1;
}
$execStopTime = getTime();
echo number_format($execStopTime - $execStartTime, 4, '.', ',').' s
while(isset()) : ';
$execStartTime = getTime();
$j = -1;
while(isset($testTab[++$j]))
{
$testTab[$j] = 1;
}
$execStopTime = getTime();
echo number_format($execStopTime - $execStartTime, 4, '.', ',').
' s
while(list() = each()) : ';
$execStartTime = getTime();
while(list($key,$val) = each($testTab))
{
$testTab[$key] = 1;
}
$execStopTime = getTime();
echo number_format($execStopTime - $execStartTime, 4, '.', ',').' s

test sur un tableau de '.number_format(count($testTab),0,',','.').' entrées';

?>
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
4 juin 2009 à 12:08
Voila ce que j'obtiens avec le code suivant...

for() : 0.0476 s
foreach() : 0.1616 s
while(isset()) : 0.0411 s
while(list() = each()) : 0.3126 s

test sur un tableau de 100.000 entrées

>>>>>>>>>>>

<?php

$testTab = array_pad(array(),100000,0);
echo 'for() : ';
list($usec, $sec) = explode(' ', microtime());
$execStartTime = (float)$sec + (float)$usec;
for($i=0,$len=count($testTab);$i<$len;++$i)
{
$testTab[$i] = 1;
}
list($usec, $sec) = explode(' ', microtime());
$execStopTime = (float)$sec + (float)$usec;
echo number_format($execStopTime - $execStartTime, 4, '.', ',').' s
foreach() : ';
foreach($testTab as $key => $val)
{
$testTab[$key] = 1;
}
list($usec, $sec) = explode(' ', microtime());
$execStopTime = (float)$sec + (float)$usec;
echo number_format($execStopTime - $execStartTime, 4, '.', ',').' s
while(isset()) : ';
list($usec, $sec) = explode(' ', microtime());
$execStartTime = (float)$sec + (float)$usec;
$j = -1;
while(isset($testTab[++$j]))
{
$testTab[$j] = 1;
}
list($usec, $sec) = explode(' ', microtime());
$execStopTime = (float)$sec + (float)$usec;
echo number_format($execStopTime - $execStartTime, 4, '.', ',').
' s
while(list() = each()) : ';
list($usec, $sec) = explode(' ', microtime());
$execStartTime = (float)$sec + (float)$usec;
while(list($key,$val) = each($testTab))
{
$testTab[$key] = 1;
}
list($usec, $sec) = explode(' ', microtime());
$execStopTime = (float)$sec + (float)$usec;
echo number_format($execStopTime - $execStartTime, 4, '.', ',').' s

test sur un tableau de '.number_format(count($testTab),0,',','.').' entrées';

?>

@ tchaOo°
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
4 juin 2009 à 11:46
Bonjour,

Suite à cette discussion, je viens de faire ce test :

<?php
$nb_occur=100000;

$time_start = microtime(true);
$tablo = array(array('t1_0','t1_1','t1_2','t1_3','t1_4','t1_5','t1_6','t1_7','t1_8'),array('test0','test1','test2','test3','test4','test5','test6','test7','test8'),array('a','b','c','d','e','f','g','h','i'),array('A','B','C','D','E','F','G','H','I'));
for ($i=0 ; $i<$nb_occur; $i++)
{
while( list ($key, $val) = each ($tablo) ) {
while( list ($key2, $val2) = each ($val) ) {

}
}

foreach($tablo as $val) {
foreach($val as $val2) {

}
}

$j = -1;
while(isset($tablo[++$j])) {
$k = -1;
while(isset($tablo[$j][++$k])) {

}
}

$i++;
}

$time_end = microtime(true);
$time = $time_end - $time_start;
$time = str_replace('.',',',$time);
echo '<hr> Durée : '.$time.' secondes
';
?>

Voici trois manières de parcourir un tableau de tableau, j'ai refait le test 5 fois, je ne vous donnes pas les temps d'exécution qui peuvent variés d'une machine à l'autre. La méthodes la plus rapide chez moi est le couple while/list, suivis d'un écart énorme avec while/isset, et de foreach. Ce qui contredit http://www.vulgarisation-informatique.com/optimiser-php.php ? Pouvez-vous infirmer/confirmer avec ce qui se passe chez vous ?
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
4 juin 2009 à 11:04
while(list() = each()) c'est carément pas pareil que while(isset())...

"Evite les foreach() si tu ne travaille pas sur un tableau associatif et si tu n'a pas besoin des clefs"

while(list() = each()) c'est pour un tableau associatif... isset() est une structure du langage pas each() et list() le temps d'éxécution n'est bien évidement pas le même...

J'avais crue voir un comparatif while() for() foreach() sur des tableaux indexés dans les bench d'Antomicro... mais tu pourra voir que sur le comparatif for()/while()...

"Comme on peut le constater, le while est légèrement plus rapide"

Quand au site de Marc... je cite...

"Le while est comme prévu la façon la plus rapide de faire une boucle mais il est évident qu'au niveau de la lisibilité du code, le for est mieux.

Pour ce qui est du foreach + range, il est à oublier pour principalement 2 raisons :

* si vous souhaitez faire de grosses boucles, vous allez tomber sur une "fatal error" (j'ai augmenté le memory_limit jusqu'à 128Mo mais rien n'y change).
* c'est long, trop long ... environ 3 fois plus qu'un while"

Après le plus simple... c'est que tu teste... remplace tes foreach par...

$i=-1;
while(isset($myArray[++$i]))

et vois quel est le meilleur temps d'exécution et ce qui charge moins la mémoire... .. . ;o)

@ tchaOo°
cs_BlackDragon Messages postés 16 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 11 août 2009
4 juin 2009 à 02:32
kankrelune: "Non le plus rapide c'est while(isset()) et ensuite for() le foreach() est plus lent et surtout beaucoup plus lourd car il travaille à partir d'une copie de ton tableau et non à partir de l'original... .. . ;o)"

pourtant sur les deux sites mentionné, il disent que foreach est le plus rapide

sur http://m-fernandez.developpez.com/articles/php/bench/#LV-B :

"Dans tous les cas, on s'aperçoit que l'utilisation du foreach est nettement plus rapide que les autres, tout particulièrement sur des grands tableaux."

sur http://www.vulgarisation-informatique.com/optimiser-php.php :

"Le while() combiné au list() est plus lent que la fonction foreach() et ce dans tous les cas de figures. Préférez donc l'utilisation du foreach()"
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
3 juin 2009 à 18:23
Non le plus rapide c'est while(isset()) et ensuite for() le foreach() est plus lent et surtout beaucoup plus lourd car il travaille à partir d'une copie de ton tableau et non à partir de l'original... .. . ;o)

http://m-fernandez.developpez.com/articles/php/bench/#LV-B (c'est le lien que tu me donne, tu as dû mal lire)
http://www.vulgarisation-informatique.com/optimiser-php.php

après ça dépend aussi de la taille du tableau et de ce que tu en fais mais une chose est sûr au dela du temps d'exécution... tu bouffera plus de mémoire avec foreach() car ce dernier crée une copie du tableau pour le parcourir ce qui n'est pas le cas avec while() et for()

@ tchaOo°
inwebo Messages postés 380 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 23 octobre 2014
3 juin 2009 à 16:36
Pour Palleas_44

Et maintenant es-tu prêt à m'aider ? Oui je pense effectivement qu'il est largement optimisable ce logiciel ! Merci par avance du coup de main.

Pour kankrelune

Tu as tout à fait raison pour getHex2Rgb()! Correction effectuée ! Par contre le second point, je suis plus septique (pour la forme, le fond tu as raison) pour l'utilisation des foreach, apparemment d'après, http://m-fernandez.developpez.com/articles/php/bench/, cela serait la solution la plus rapide pour parcourir un tableau ? Qu'en penses-tu ?
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
2 juin 2009 à 23:57
Pourquoi tant de haine dans les commentaires... on est plus en cour de récré il me semble... il a quand même le droit de ne pas avoir ENCORE commenté POUR L'INSTANT... c'est fou ça... encore un commentaire qui ne sert strictement à rien... la prochaine fois autant avoir la flème de commenter... hein... .. . ;o)

Bref... je ne fait que peu de design/intégration et ne connaissais pas le concept... je trouve ça très intéressant... .. .

Pour le code je ne l'ai pas regardé... juste survolé la class makePics...

dans getHex2Rgb() l'utilisation redondante de strlen() ne se justifie pas tu en fait un au début de la méthode tu décrémente si substr() ça suffit...

Evite les foreach() si tu ne travaille pas sur un tableau associatif et si tu n'a pas besoin des clefs remplace les par des for() ou while(isset())

@ tchaOo°
Palleas_44 Messages postés 130 Date d'inscription lundi 12 décembre 2005 Statut Membre Dernière intervention 19 avril 2009
2 juin 2009 à 22:50
"Je n'ai pas encore commenté le code, pour l'instant la flemme."
Je n'ai même pas envie de t'aider à corriger des deux/trois trucs qui pourraient être améliorés dans ton code, la flemme. Après tout pourquoi nous on s'embêterait, si toi tu postes ton truc (largement optimisable en plus) à l'arache ?
Rejoignez-nous