Salut a tous,
pour optimiser mon code j'aimerais savoir comment doit-on procéder pour pouvoir afficher le temps de génération d'une page?
Salut a tous,
pour optimiser mon code j'aimerais savoir comment doit-on procéder pour pouvoir afficher le temps de génération d'une page?
ba tu stocke le temps actuel au début de la génération de la page(style juste apres le <?php) avec la fonction time();
Puis à la fin de ton code tu refais un appel à time, tu soustrais la première valeur à celle que tu viens de récupérer et tu as le temps de génération de ta page en secondes
Voilou, ensuite je ne sais pas si ça correspond à ce que tu recherche, mais bon c'est une solution onne peut plus simple
OUi mais je me demandais si il n'existait pas deja des fonctions toute faites.
Et j'aurai la même question pour compter le nombre de requette? Faut quand même pas faire un compter et faire + 1 à chaque requette?
A oui le probleme avec la fonction time c'est que l'on a les secondes. On ne peut pas avoir les centieme de seconde?
Par contre c'est bizare. Desfois quand je raffraichi j'obtient un temps négatifsnormal?
Ouahou tu remontes le temps !
fais voir ton code ... (que je remonte moi aussi, j'ai les résultats de quelques loto intéressants à jouer 8) )
Il existe des librairies "toutes pretes" (dans pear entre autre) qui permettent ça...
Sinon, voici une partie de ce que j'utilise :
Pour l'utilisation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101 // --------------------- Fonctions de benchmark function & k_bench_init() { static $bench = array( 'stats'=>array(), 'count'=>array(), 'tmp'=>array(), ); return $bench; } function k_bench_start($cat,$info=false) { $start=k_time_actual(); $benchInfo = & k_bench_init(); if($tmp=end($benchInfo['tmp'])) { $include=$tmp['cat']; if($tmp['info']) $include.=' / '.$tmp['info']; } else $include=false; array_push($benchInfo['tmp'], array('cat'=>$cat, 'start'=>$start, 'info'=>$info, 'include'=>$include)); } function k_bench_stop($info_end=false) { $benchInfo = & k_bench_init(); if(!$tmp=array_pop($benchInfo['tmp'])) return false; $cat=$tmp['cat']; $info=$tmp['info']; if($info_end !== false) { if($info) $info.=' / '; $info.=$info_end; } if($tmp['include'] !== false) $info.=' (included in : '.$tmp['include'].')'; $time=bcsub(k_time_actual(), $tmp['start'], 6); if(!isset($benchInfo['stats'][$cat])) { $benchInfo['stats'][$cat]=array('1 '.$info=>$time); $benchInfo['count'][$cat]=1; } else { $id=(++$benchInfo['count'][$cat]).' '.$info; $benchInfo['stats'][$cat][$id]=$time; } return true; } function & k_bench_get() { $benchInfo = & k_bench_init(); $level = 1; while( k_bench_stop('force '.($level++).' level') ); $stats=array( 'php'=>array( 'total'=>bcsub(k_time_actual(), k_time_start(), 6) ) ) + $benchInfo['stats']; foreach($stats as $cat => $list){ if(count($list)>1){ $count=0; foreach($list as $time) $count+=$time; $stats[$cat]['total']=$count; } } return $stats; } // --------------------- Fonctions diverses function k_time_start() { static $time = NULL; if( $time === NULL ) $time = k_time_actual(); return $time; } function k_time_actual() { $tmp = explode( ' ', microtime() ); return $tmp[1] . substr( $tmp[0], 1 ); }
1) le plus tôt possible dans le code, appeler k_time_start() pour pouvoir initialiser le compteur.
2) entourer les portions de code à chronometrer comme ceci :
3) à la fin du script, afficher les résultats :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 k_bench_start( 'lecture cache', 'nom du cache' ); [...] k_bench_stop()
Ce qui donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 $stats = k_bench_get(); echo '<ul>'; foreach( $stats as $cat => $list ) { echo '<li>'; echo '<ul>', htmlspecialchars( $cat ); foreach( $list as $info => $time ) { echo '<li >', htmlspecialchars( round( $time * 1000 , 2 ) ), 'ms ', htmlspecialchars( $info ), '</li>'; } echo '</ul></li>'; } echo '</ul>';
Bon... ce n'est qu'un exemple... mais en tous cas c'est bien pratique.![]()
bah j'ai juste fai:
en de ma page
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2<? $tempscreaction=microtime(); ?>
et ca:
en bas de la page
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $tempsfini=microtime(); $tempsaffi=$tempsfini-$tempscreaction; echo $tempsaffi;.
relis la doc de microtime, surtout le type de ce qui est retourné...
Donc si je fait la soustraction entre les 2 j'ai bien le temps en seconde avec les microseconde non?microtime() retourne le stimestamp Unix avec les microsecondes.
non justement. Mais ma fonction "k_time_actual()" plus haut utilise correctement microtime()...
C'est un peu de l'artillerie lourde pour obtenir jsute le temps de génération d'un e page quand même.Envoyé par Kioob
c'est deja plus simple quand même<?php
$startTime = array_sum(explode(" ",microtime()));
echo round((array_sum(explode(" ",microtime())) - $startTime),4).' sec';
?>?
il y a un exemple d'utilisation sur la doc...
Ou il y a la fonction de Kioob...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function k_time_actual() { $tmp = explode( ' ', microtime() ); return $tmp[1] . substr( $tmp[0], 1 ); }Ca de l'artillerie lourde...
![]()
je te parle d'une seule fonction, qui fait 2 lignes... pas de l'ensemble qui permet de benchmarker relativement "finement" de multiples portions de scripts dans un même code...
note : en utilisant array_sum() tu perds une grande partie de la précision de microtime()...
Pour pouvoir faire les calculs correctement il faut utiliser les fonctions bc_xxx(). Or, comme c'est assez couteux il est plus rapide de conserver le résultat de microtime() en chaine, et de ne faire les calculs qu'au dernier moment.
Edit : d'ailleurs la fonction en question est inspirée de la classe benchmark de PEAR si j'ai bonne mémoire...
Une autre classe d'artillerie lourde sinon que je trouve sympa : http://phpdebug.sf.net
Partager