Carnet Wiki

var_debug et var_profile

Version 1 — Septembre 2009 JLuc

L’outil actuel de debug et profilage est appelé lorsqu’on ajoute dans l’url appelée les paramétres suivants :
-  var_mode=debug
-  var_profile=1 ou var_profile=sql
(vérifier)

Sont alors affichés ou accessibles des informations techniques avancées comme :
-  les temps de compilation
-  les temps d’exéceution
-  les codes sources SPIP, PHP, (MY)SQL

Ces informations sont affichées pour chaque molécule élémentaire de code spip :
-  boucles
-  inclusions
-  appels de balise en dehors d’une boucle (vérifier)

Limitations techniques

ESJ :

Le vocabulaire standard considère que « le temps de compilation » est le temps que met le compilateur à traduire le langage-source (ici le langage des squelettes) dans le langage-cible (ici PHP) et il est de peu d’intérêt ici puisque la compilation intervient rarement en production : une fois compilé, c’est le code PHP qui est exécuté. Le temps intéresant à afficher est le temps d’exécution du code PHP compilé, et c’est ce que veut faire SPIP en mesurant le temps au niveau de la fonction inc_parametrer et non ailleurs.

Malheureusement, le temps qu’il affiche est biaisé de plusieurs manières :

1. par définition, le mode debug recompile tous les squelettes pour être certain d’avoir la dernière version ; résultat : le temps d’exécution d’un squelette incluant va être plombé par le temps de compilation des squelettes inclus, bien qu’il ne compte pas son propre temps de compilation.

2. on se sert de la fonction time(), qui donne seulement l’heure qu’il est, autrement dit on mesure la charge globale du serveur, pas le temps CPU spécifique au code PHP exécuté.

3. si un squelette est inclus dans une boucle, le temps affiché par le débusqueur est celui du dernier passage dans la boucle,
non pas le temps cumulé de tous les passages (ça c’est un choix arbitraire qui pourrait être différent, mais il faut en être conscient).