Accueil > Développement > Programmation > Optimisation du code (2)

Optimisation du code (2)

A la recherche de la petite bête.

lundi 20 mars 2006, par Prélude

Commençons simplement par un choix entre IF et SWITCH. Cela arrive souvent que l’on ait à se poser la question. Alors que choisissez-vous lorsque vous en avez le choix ?

Voici les résultats pour une structure de contrôle de type IF :

for($i=0;$i<500000;$i++) {
        if($i==1) {
                $a = "1 ";
        }else if($i==2) {
                $a = "2 ";
        }else if($i==3) {
                $a = "3 ";
        }
}

Temps moyen : 0.295 s

On fait la même chose avec un SWITCH :

for($i=0;$i<500000;$i++) {
        switch($i) {
                case 1:
                        $a = "1 ";
                        break;
                case 2:
                        $a = "2 ";
                        break;
                case 3:
                        $a = "3 ";
                        break;
                default:
                        $a = "0";
                        break;
        }
}

Temps moyen : 0.290 s

Le Switch, dans ce cas, est un petit peu plus rapide, mais de trois fois rien. Le choix peu donc se porter plus sur une méthode de programmation que sur un choix objectif de la vitesse.

Mais rajoutons une valeur par défaut à notre test :

for($i=0;$i<500000;$i++) {
        if($i==1) {
                $a = "1 ";
        }else if($i==2) {
                $a = "2 ";
        }else if($i==3) {
                $a = "3 ";
        }else{
                $a = "0";
        }
}

Temps moyen : 0.390 s

Et la même chose pour le SWITCH :

for($i=0;$i<500000;$i++) {
        switch($i) {
                case 1:
                        $a = "1 ";
                        break;
                case 2:
                        $a = "2 ";
                        break;
                case 3:
                        $a = "3 ";
                        break;
                default:
                        $a = "0";
                        break;
        }
}

Temps moyen : 0.415 s

Dans ce cas de figure, le IF est plus rapide que le SWITCH. Il est vrai que l’instruction default : est exécuté pas mal de fois dans cet exemple. A vous donc de choisir le plus interressant en fonction de vos besoins.

Il serait interressant de voir également l’opérateur conditionnel ternaire  ? : et sa rapidité, apparente, par rapport à un IF "standard".
Beaucoup de jeunes développeurs apprécient cet opérateur pour son côté "obscur" : il donne au code un caractère personnel, et donne l’impression d’être plus rapide.
Mais il contribue également à rendre le code moins lisible, moins instinctif.

Alors qu’en est-il ?

for($i=0;$i<500000;$i++) {
        if($i<10000) {
                $a = "1 ";
        }else{
                $a = "0";
        }
}

Temps moyen : 0.255 s

Voyons maintenant l’opérateur conditionnel ternaire :

for($i=0;$i<500000;$i++) {
        $i<10000  ? $a = "1 ": $a = "0";
}

Temps moyen : 0.354 s

Il est plus lent ! Et oui, les apparences sont parfois trompeuses.