Petite question de rapidité

Eléphant du PHP | 94 Messages

28 août 2010, 15:54

Bonjour,

J'ai :

$montableau[$compteur] = $mavaleur;
$compteur++;

Que je peux changer en :

$montableau[$compteur++] = $mavaleur;


Outre le fait que c'est plus concis, mais que perso, je trouve ça moins clair lors d'une relecture, est-ce que ça a un intérêt ?

Bref, est-ce que c'est plus rapide ?


Je sais, c'est pas une question très importante, mais bon...

Mammouth du PHP | 686 Messages

28 août 2010, 15:59

Personnellement je ne pense pas que le fait que tu incrémente ta variable avec une ligne supplémentaire de code ait une grande influence sur la rapidité d'execution de ton script.
En revanche, personnellement, je pense que la première solution est en effet plus explicite pour une relecture

Eléphant du PHP | 94 Messages

28 août 2010, 16:04

Merci.

Par contre, si c'est dans une boucle (avec un nombre important d'itérations), cela peut peut-être un peu jouer donc ?

Mammouth du PHP | 686 Messages

28 août 2010, 16:07

eh bien en fait si c'est dans une boucle il y a une manière plus correcte de faire ca
for($compteur = 0; $compteur <  $nombre_limite; $compteur++){
$montableau[$compteur] = $mavaleur;
}


Eléphant du PHP | 94 Messages

28 août 2010, 16:11

Oui, sauf si c'est à l'intérieur d'une condition elle-même dans une boucle.

Par exemple, on ne va pas incrémenter à chaque tour de boucle.



Comment ça je me prends la tête pour rien !


D'abord c'est le week end, je fait ce que je veux de ma tête.

Mammouth du PHP | 686 Messages

28 août 2010, 16:13

a d'acc
A priori, je ne pense pas qu'il y ai une grande différence entre les deux syntaxes.
Après tu peux tester toi même en voyant le temps d'execution entre les deux syntaxes avec un grand nombre.
Mais a priori je pense pas que tu te prenne la tête pour un gros detail ... :wink:

Eléphant du PHP | 94 Messages

28 août 2010, 16:44

C'est ça le truc.

Quand tu commences à gérer à peu près un truc, tu cherches la petite bête; sinon on s'ennuie.

Peut-être qu'un de ces 4 j'essayerais de tester; pour voir.

Mammouth du PHP | 686 Messages

28 août 2010, 16:50

Quand tu commences à gérer à peu près un truc, tu cherches la petite bête; sinon on s'ennuie.
C'est vrai ce que tu dis, moi je suis pareil, quand je gère, j'essaie de pousser les limites + loin, je me pose des questions, des problèmes ...
C'est comme ca qu'on avance ! :lol:

Eléphant du PHP | 94 Messages

28 août 2010, 18:36

On est tous pareil.

ViPHP
AB
ViPHP | 5818 Messages

28 août 2010, 18:58

Peut-être qu'un de ces 4 j'essayerais de tester; pour voir.
Encore un qui n'est pas surchargé de travail pour s'amuser avec ces broutilles :)

Les optimisations d'un code ne se situent pas réellement à ce niveau. Il y a bien d'autres choses à faire avant (optimisation du schéma des tables, des requêtes etc.)

Mais cela dit, plutôt que de te poser des questions, autant faire le code pour y répondre, ça t'aurais pris moins de temps :wink:
$montableau = array();
$compteur = 0;
$mavaleur = 1;


$time = microtime(true);
for ($i=0; $i<1000000; $i++) 
{
$montableau[$compteur] = $mavaleur;
$compteur++;
}
$time_end = microtime(true);

$time_tot = $time_end - $time;
echo 'durée exécution 1 = ' . $time_tot.'<br />';


$montableau = array();
$compteur = 0;

$time = microtime(true);
for ($i=0; $i<1000000; $i++) 
{
$montableau[$compteur++] = $mavaleur;
}
$time_end = microtime(true);

$time_tot = $time_end - $time;
echo 'durée exécution 2 = ' . $time_tot.'<br />';
Bon le verdict est sans appel, il faut 1 million d'itérations dans la boucle pour gagner au total 1/100 de seconde avec la solution 2 (moyenne approximative sur plusieurs tests).
A toi de voir mais normalement on essaie de garder un code le plus lisible possible tant que la différence n'est pas sensible pour l'usage courant. Donc à moins que tu fasses couramment des boucles de plusieurs millions d'itérations...
Et puis si tu te pose trop de questions niveau rapidité absolue, tu vas finir par ne plus coder en mode objet car le procédural est généralement plus rapide...

Eléphant du PHP | 94 Messages

28 août 2010, 19:42

Justement, je ne code pas en mode objet.


Il y a un truc que je n'arrive pas bien à saisir avec l'objet.



Mais bon, c'était une question du samedi quoi.


Bon w.e.

ViPHP
AB
ViPHP | 5818 Messages

29 août 2010, 05:00

Un petit résolu ?

ViPHP
ViPHP | 5462 Messages

31 août 2010, 03:24

la pré-incrémentation me semblerait plus juste que la post (et plus rapide en plus)

en post ($truc++) la valeur est incrémenté au prochain appelle)
en pré (++$truc) c'est fait tout de suite
$tmp = 0;

echo ++$tmp;  //1
echo $tmp++;  //1
echo $tmp;     //2
bon après... je rejoins les autres.