Tests de performances PHP
Tagged:

Un article fort intéressant vient d'être publié sur le site Developpez.com. Cet article rassemble un large panel de tests comparatifs sur les vitesses d'exécution de différents pans de code.

Pour les pressés, je vais vous résumer les grandes lignes qui ressortent de ces test. Vous pouvez lire l'article original ici.

Chaines de caractères :

  • Pas de différence entre guillemets et apostrophes pour une chaine simple. Le seul intérêt des apostrophes en délimiteurs est de pouvoir mettre des guillemets à l'intérieur pour les attributs HTML, sans les échapper.
  • Avec une variable, la concaténation chaine-variable ('toto
    '.$i) est plus rapide que l'inclusion de la variable dans la chaîne ("toto $i")
  • Pour le remplacement de caractères, strtr est clairement la plus rapide (str_replace pour le remplacement de mots).

Echo :

  • Pas de différence notable entre le print et le echo. Pareil entre l'utilisation d'une chaine concaténée (echo 'toto '.$i;) ou de plusieurs paramètres (echo 'toto', $i;)
  • Un gros echo vaut mieux que plusieurs petits. Et si possible, utiliser le buffer de sortie (voir la doc).

Structures conditionnelles :

  • Avec peu de cas, le if est le plus rapide
  • Avec un nombre important, c'est le switch.
  • L'opérateur ternaire est toujours le plus lent (et le moins lisible).

Structures itératives :

  • Le while est l'option la plus rapide
  • Inclure le count($tableau) directement dans la condition du for faire perdre un temps considérable.
  • Pour le parcours de tableaux, la structure while(list($cle, $valeur) = each($tableau)) $test=$valeur; l'emporte de très loin sur ses petits camarades (for, foreach, while).

Lecture/écriture de fichiers :

  • Pour des fichiers de moins de 1Mo, les différences sont très faibles
  • Pour lire sous forme de chaine, le trio fopen-fread-fclose l'emporte sur file_get_contents
  • Pour lire sous forme de tableau, la fonction file est la seule option à envisager tant les gains sont importants
  • Pour écrire, le trio fopen-fwrite-fclose l'emporte sur file_put_contents

Merci à l'auteur de l'article sur DVP pour ces tests.