Profiler le code


→ ajouter une fonction et ses appels à des endroits stratégiques

   function profile ($txt,$dump=FALSE)
   {
      static $times;
      if ($dump)
      {
         if (!file_exists("perfs.log"))
         {
            $f = fopen("perfs.log","w");
            for ($i=1;$i<sizeof($times);$i++)
               fwrite($f,sprintf("%s:",$times[$i][0])); // header
            fwrite($f,"\n");
         }
         else
            $f = fopen("perfs.log","a");
         for ($i=1;$i<sizeof($times);$i++)
            fwrite($f,sprintf("%f:",$times[$i][1]-$times[$i-1][1])); // valeurs
         fwrite($f,"\n");
         fclose($f);
      }
      else
      {
         list($usec, $sec) = explode(" ", microtime());
         $times[] = array($txt,((float)$usec + (float)$sec));
      }
   }
   profile("Debut"); // init en début de script
   ...
   profile("Traitement"); // après le code de traitement des actions
   ...
   profile("Formatage"); // après les regex de formatage
   ...
   profile("",TRUE); // a la fin pour écrire les valeurs


→ on obtient le résultat dans le fichier perfs.log :
Traitement:Formatage:
0.027288:0.407159:
0.027298:0.453744:
0.032468:0.444973:
0.025138:0.446650:


Obtenir les perfs


Voici un petit script pour collecter les données en affichage :
#!/bin/bash
url="http://localhost/tw/?page=TestSpeed"
i=0
nb=20
while [ "$i" -lt "$nb" ]
do
   echo "$i"
   wget -q -O /dev/null "$url"
   i=`expr $i + 1`
done
wget -q -O - ${url%\?*}perfs.log

Il faut bien sur remplacer la variable url par la page à tester.

Résultats


Voici les 1ers résultats obtenus en remplaçant u_niquement les preg_replaces par str_replace pour les chaines statiques soit :
Les chiffres sont donnés pour 4 versions sur le rendu de la page TestSpeed :
  1. TigerWiki 2.21 non modifié (vanilla)
  2. TigerWiki 2.21 avec les optimisations
  3. TigerWiki 2.21 avec ma balise Code
  4. TigerWiki 2.21 avec ma balise Code et les optimisations (cette version est dispo la)
Le fichier au format pdf : Perfs

Le gain n'est pas foudroyant (entre 0.5% et 1.7%) mais c'est sans doute un travail qui mérite d'être fait.

Axes d'améliorations