depuis le temps que je prends des codes sur ce site il fallait bien que je poste quelque chose
je cherhcais un compteur multiple de temps d'execution pour mon site
mais ne trouvant rien que des petits compteurs sur le site
j'ai donc créé très récemment une classe permettant de calculer le temps d'execution
elle fonctionne sur la basse d'un "message stack"
donc voici ma classe:
Source / Exemple :
<?php
/*
Script par Stéphane Goetz
ce script permet de créer a la volée des
compteurs de temps d'éxecution
class timeStack {
// class constructor
function timeStack() {
$this->messages = array();
}
// class methods
function open($class) {
$this->messages[] = array('class' => $class, 'time' => array_sum(explode(' ', microtime())));
}
function close($class) {
for ($i=0, $n=sizeof($this->messages); $i<$n; $i++) {
if ($this->messages[$i]['class'] == $class) {
$this->messages[$i]['time'] = round(array_sum(explode(' ', microtime())) - $this->messages[$i]['time'], 4);
}
}
}
function display($class = 'view_all_stacks') {
if($class == 'view_all_stacks'){
echo '<table border="1">';
echo '<tr><th>Nom</th><th>Temps</th></tr>';
for ($i=0, $n=sizeof($this->messages); $i<$n; $i++) {
echo '<tr><td>'.$this->messages[$i]['class'].'</td><td>'.$this->messages[$i]['time'].'</td></td>';
}
echo '</table>';
} else {
for ($i=0, $n=sizeof($this->messages); $i<$n; $i++) {
if ($this->messages[$i]['class'] == $class) {
echo '<div style="border-color:red;">'.$this->messages[$i]['class'].': '.$this->messages[$i]['time'].'</div>';
}
}
}
}
function reset() {
$this->messages = array();
}
function size($class) {
$count = 0;
for ($i=0, $n=sizeof($this->messages); $i<$n; $i++) {
if ($this->messages[$i]['class'] == $class) {
$count++;
}
}
return $count;
}
}
?>
<?
//inclusion et création de la classe
include('time_stack.php');
$timeStack = new timeStack;
//ouverture d'un compteur de test
$timeStack->open('test');
//attente pour le test
sleep(4);
//fermeture du compteure
$timeStack->close('test');
//si le compteur test existe
if ($messageStack->size('test') > 0) {
//affichage du compteur de test
$timeStack->display('test');
}
// si il n'y a pas de paramètre dans la fonction display
//elle affiche un tableau avec toutes les données
$timeStack->display();
?>
Conclusion :
désolé si le code n'est pas beaucoup commenté
je n'ai pas pris le temps de le faire
mais le script est facile à utiliser
27 août 2006 à 21:21
mais ne trouvant rien que des petits compteurs sur le site"
http://www.phpcs.com/codes/PHP5-CLASSE-BENCHMARK_35497.aspx
Petit mais costaud :)
27 août 2006 à 14:40
C'est pas mal mais en cas de bench multiple c'est chiant de devoir créer un nom pour l'index... perso j'utilise un index numérique qui s'incrémente à chaque nouvelle entrée l'index étant renvoyé par la méthode de création du bench... ce qui donne... .. .
$benchId = $bench->sart();
... le code ...
$bench->stop($benchId);
C'est pas grand chose mais je trouve plus simple... comme ça tu peux retrouver un bench précis grace à l'id généré... par contre dans ton cas je trouve que tu te prend la tête pour retrouver le bench en cours...
pour quoi ne pas faire...
function open($class)
{
if(!isset($this->messages[$class]))
$this->messages[$class] = array_sum(explode(' ', microtime()));
else
... on consigne une erreur le bench $class existant déja ...
}
function close($class)
{
if(isset($this->messages[$class]))
$this->messages[$class]= round(array_sum(explode(' ', microtime())) - $this->messages[$class], 4);
else
... on consigne une erreur le bench $class n'existant pas ...
}
En même temps tu gère ça avec le nom des class ou code benché donc y a pas trop d'alternative me dira tu... .. .
@ tchaOo°
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.