Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Site Web > PHP > Optimisation & Sécurité > Temps d'exécution d'un script > Lecture du tutoriel

Temps d'exécution d'un script

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : Kiepah
Note : 19 / 20 (21 votes)
Visualisations : 18 548

Plus d'informations Plus d'informations
Vous voulez calculer le temps d'exécution de votre script, afin de pouvoir optimiser sa vitesse, mais vous ne savez pas comment faire ?
Heureusement, ce tutoriel est fait pour ça ! Je vous y explique dans un premier temps quelle fonction nous allons utiliser, puis les différentes méthodes pour PHP4 et PHP5.
Sommaire du tutoriel :
Icône du chapitre

Description de la fonction utilisée

Pour calculer le temps d'exécution des scripts, nous avons besoin d'une fonction maîtresse : microtime().
Citation : Documentation PHP
mixed microtime ( [bool get_as_float] )

Après lecture de la documentation au sujet de cette fonction, on comprend que la fonction microtime() renvoie le Timestamp, avec les microsecondes.
Pourquoi n'utilise-t-on pas la fonction time() ?

Nous pourrions utiliser cette fonction, seulement, elle a un gros inconvénient par rapport à microtime() : elle n'est précise qu'aux secondes près. Or, la plupart des _bons_ scripts sont exécutés en moins de 0,1 seconde ! La fonction microtime() permet donc d'être un maximum précis. ;)
Il y a une différence entre la fonction en PHP4 et en PHP5 ?

Justement, j'y viens ! :)
Donc, oui, il y a une différence :

En PHP6, l'argument true sera l'argument par défaut de la fonction, il suffira donc de faire microtime() afin d'obtenir la forme sec.µsec !
Pour plus d'informations sur ce sujet et sur PHP6, rendez-vous ici. ;)

Cette fonction retourne le Timestamp Unix. Par conséquent, si votre serveur est sous Windows, il se peut que ce que microtime() retourne soit erroné !
Pour savoir si microtime() fonctionne sur votre serveur, il faut savoir si la fonction gettimeofday() fonctionne !

Comment je sais si je suis en PHP4 ou PHP5 ?

Il existe une fonction très simple qui vous renseigne (entre autres) sur la version de PHP : phpinfo(). Pour l'utiliser, il suffit de créer une page PHP vide, puis d'y insérer le code PHP suivant :
Code : PHP
1
<?php phpinfo(); ?>

Après exécution de la page, vous devriez obtenir une page comme celle-ci :

La plupart des informations données sont importantes, mais, dans notre cas, seule la première l'est : la nomination de PHP par son numéro de version ! :) (Pour ceux qui ne voient pas, c'est ce que j'ai encadré en rouge, et indiqué par une flèche. :-° ) Il vous suffit de lire ce numéro. S'il est noté 4.x.x, alors votre PHP est en version 4 ; s'il est noté 5.x.x, alors vous possédez la version 5 de PHP (ah, vous aviez deviné tout seuls ?)

Maintenant que vous savez tout ça, on peut rentrer dans le vif du sujet, le calcul du temps d'exécution de votre script ! :)

Le code en PHP4

Calcul du temps en PHP4



Venons-en à la pratique ! :D
Comme nous sommes en PHP4, nous ne pouvons pas utiliser l'argument true dans la fonction, donc nous devons fabriquer nous-mêmes ce nombre, avec les informations retournées par microtime().

Pour passer de la forme µsec sec à sec.µsec, il faudra couper le nombre retourné par microtime() là où il y a un espace, non ?

Oui, et il y a justement une fonction qui coupe une chaîne à un endroit précis ! Cette fonction est celle-ci : explode().
Citation : Documentation PHP
array explode ( string separator, string string [, int limit] )

On comprend donc qu'il faut 2 paramètres obligatoires : le caractère avec lequel on va couper notre chaîne, et la chaîne elle-même. :D

Le code PHP est donc :
Code : PHP
1
2
3
4
<?php
/* On coupe la chaîne retournée par microtime à l'endroit de l'espace */
$temps = explode(' ', microtime());
?>


J'ai essayé d'afficher $temps, mais ça m'affiche "Array" :'((((. Pourquoi ?

Si vous lisez attentivement la Documentation PHP à propos de cette fonction, vous verrez que explode retourne un Array() ! ;)
Si vous voulez afficher la variable $temps, vous devez utiliser une fonction spécifique qui affiche le contenu des arrays : print_r().

Lorsque vous voulez afficher un texte avec print_r(), vous pouvez l'entourer des balises <pre></pre>. En effet, ces balises permettent d'afficher un texte préformaté, donc avec des indentations pour délimiter les niveaux de l'array. ;)


Si j'ai bien compris, explode() retourne un array, et nous, nous voulons additionner les deux membres de l'array afin d'obtenir la valeur recherchée, c'est ça ?


Il existe une fonction qui additionne tous les membres d'un array.
Cette fonction est la suivante : array_sum().
Citation : Documentation PHP
number array_sum ( array array )

On voit donc que cette fonction retourne un nombre (la somme de tous les membres de l'array), et l'array en question.

Le code pour obtenir le temps dans la forme sec.µsec en PHP4 est donc :
Code : PHP
1
2
3
4
<?php
/* On coupe la chaîne retournée avec explode(), puis on additionne les deux membres de l'array retourné avec array_sum() */
$temps = array_sum(explode(' ', microtime()));
?>


Un petit plus



Si vous devez calculer souvent le temps précis du temps avec microtime(), vous allez devoir à chaque fois utiliser ces trois fonctions !
Un petit avantage serait de faire une fonction qui ne prend pas d'argument, et qui retourne le microtime sous la forme correcte !
Vous pouvez la faire tout seuls, mais je vous la donne :
Code : PHP
1
2
3
4
5
<?php
function microtime_float() {
    return array_sum(explode(' ', microtime()));
}
?>

C'est aussi simple que cela ! ;)

Calcul du temps d'exécution d'un script



Maintenant que l'on sait avoir le temps précis et correctement écrit, on va pouvoir passer au calcul du temps d'exécution du script !
Pour cela, vous allez devoir placer une variable qui contiendra le temps de départ du script, et une qui contiendra le temps de fin du script. (Logique, me direz-vous. ;) )
Ensuite, il suffira de faire une simple soustraction, et vous aurez le temps d'exécution du script. :-°

Voici le code :
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
function microtime_float() {
    return array_sum(explode(' ', microtime()));
}
$temps_debut = microtime_float(); 
/* Votre script ... */
/* Encore du code */
$temps_fin = microtime_float();
/* Affichage du temps d'exécution, arrondi à 4 chiffres après la virgule */
echo 'Temps d\'execution du script : '.round($temps_fin - $temps_debut, 4);
?>

Le code en PHP5

Le code en PHP5 est beaucoup plus simple !
En effet, il vous suffira d'utiliser l'argument true, et vous aurez directement la forme désirée : sec.µsec :)

Le code est donc beaucoup plus court, et beaucoup plus simple :

Code : PHP
1
2
3
4
5
6
<?php
$temps_debut = microtime(true);
/* Du code ... */
$temps_fin = microtime(true);
echo 'Temps d\'execution : '.round($temps_fin - $temps_debut, 4);
?>

Voilà, ce tutoriel est terminé, j'espère que vous saurez maintenant utiliser la fonction microtime() de la bonne façon lors de vos prochains scripts !
En espérant que vous pourrez optimiser le temps d'exécution de vos scripts, je vous dis à la prochaine pour un nouveau tutoriel ! ;)

P.-S. : vous pouvez toujours me contacter par MP ou par e-mail si vous avez une question à propos de ce tutoriel. :)
Retour en haut Retour en haut


Créé : le 12/01/2006 à 22:37:21
Modifié : le 22/08/2008 à 16:08:13
Avancement : 100%
Licence : Copie non autorisée

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 575 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0408s (0.0301s)