// 2007/07/30 21:09 / 90.1.187.152
// 2007/08/04 01:38 / 86.220.199.82
!! 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
fwrite($f,sprintf("%s:",$times[$i][0])); // header
fwrite($f,"\n");
}
else
$f = fopen("perfs.log","a");
for ($i=1;$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 remplacement des tags dans le template (CONTENT, HISTORY, PAGE_TITLE ...)
* les regex sans références dans la partie Formatage de page (ligne 194 en 2.21)
Les chiffres sont donnés pour 4 versions sur le rendu de la page [TestSpeed] :
# TigerWiki 2.21 non modifié (vanilla)
# TigerWiki 2.21 avec les optimisations
# TigerWiki 2.21 avec ma balise [Code]
# TigerWiki 2.21 avec ma balise [Code] et les optimisations (cette version est [dispo la|sources/?file=./2.21_str_code/index_str_code.php])
Le fichier au format pdf : [Perfs|data/Perfs_TigerWiki.pdf]

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
* remplacer preg_replace par str_replace la ou on peut
* traquer les preg_match à remplacer par strpos
* appliquer le même raisonnement aux autres preg_*
* surement pleins d'autres choses au niveau de l'algo donc plus compliquées :)
* surement pleins d'autres choses au niveau de l'algo donc plus compliquées :)

TOC