Retourner � la page d'accueil de TJS
 

Impossible d'optimiser sans instrument de mesure. Mesurer le temps de traitement permet de :
- dterminer les oprations les plus coteuses et donc de cibler celles qu'il faut optimiser.
- contrler l'efficacit d'une optimisation.
L'optimisation consiste simplement rduire le temps d'excution d'un traitement, idalement sans modifier le rsultat du traitement. Pour mesurer le temps de traitement, il suffit de rcuprer l'heure prcise au dbut et la fin du traitement et de faire la diffrence.

La rcupration de l'heure prcise se fait avec la fonction microtime() qui retourne l'heure systme avec une prcision du centime de microseconde, largement suffisante pour nous. Malheureusement le format de microtime() est particulier et une manipulation est ncessaire pour le convertir en valeur utilisable.






Nous allons crer une fonction rutilisable (car l'optimisation peut se faire sur toutes les pages de votre site) qui retourne le temps de traitement en millisecondes.
function tjs_GetTempsTraitement($timer1) {
  $timer2 = microtime();
  $timer2 = substr($timer2,strpos($timer2," ")) + substr($timer2,0,strpos($timer2," "));
  $timer1 = substr($timer1,strpos($timer1," ")) + substr($timer1,0,strpos($timer1," "));
  return round( ($timer2-$timer1) * 10000)/10;
}
Cette fonction attend en paramtre la valeur de microtime() avant le traitement.


Voici un exemple d'utilisation.
$ChronoStart = microtime(); // On enregistre l'heure serveur avant le traitement
// Ici votre traitement
// mesurer
// Code PHP
// Requte SQL
// ....
$temps = tjs_GetTempsTraitement($ChronoStart); // Appel de la fonction aprs le traitement

Voici le rsultat obtenu pour le traitement d'une boucle vide de 1 100 000 : 0.8 ms

Dans le cas o le temps de traitement est trs faible, infrieur la milliseconde, la mesure n'est pas suffisamment prcise. Pour mesurer le temps de manire plus fiable, la solution est de lancer l'excution du traitement dans une boucle de N passages.


REM1 : il existe srement d'autres faons de manipuler le rsultat particulier de microtime(). C'est une solution parmi d'autres.
REM2 : Les versions les plus rcentes de PHPMyAdmin utilisent ce principe pour afficher le temps d'excution d'une requte SQL.

Par o commencer les optimisations ?
Une bonne pratique pour optimiser son site est d'afficher le temps de traitement total ncessaire la gnration de la page.
Attention cette valeur, le temps indiqu peut tenir galement du temps de chargement de la page.
Malgr tout cet indicateur donne une bonne ide des pages les plus longues gnrer. Concentrez vous sur les pages les plus vues et les plus longues construire.

On peut considrer qu'une page classique doit se gnrer en moins de 50 millisecondes. Les pages statiques peuvent tre encore plus rapides.


Voici quelques pistes pour trouver les traitements souvent coteux et faciles optimiser.

Les includes de fichiers
Inclure un fichier de fonctions par l'instruction include ou require prend du temps : le moteur PHP doit lire le script et l'analyser. Evidemment plus le fichier inclure est long, plus le moteur doit travailler.
La facilit de programmation consiste inclure chaque page tous les fichiers de fonctions, mme ceux qui ne sont pas utiles.
Une bonne pratique est de n'inclure que les fichiers qui contiennent les fonctions utiles la page.
J'ai choisi pour ma part de multiplier le nombre de fichiers inclure avec un dcoupage par fonctionnalits. Gnralement, cela correspond 1 fichier avec toutes les fonctions communes toutes les pages (gestion des sessions, de la navigation, ...) et de nombreux fichiers avec des fonctions spcifiques (forums, actus, articles, ...) qui ne sont inclus qu'au cas par cas.

On peut mme aller plus loin en faisant l'include seulement au moment de l'utilisation d'une fonction.

Les boucles
Si vos scripts utilisent les boucles, vrifiez bien le contenu du traitement de la boucle et le nombre d'itrations.
Evitez dans une boucle de faire des traitements redondants. Un traitement exactement identique ne doit pas tre fait dans une boucle, mais avant. Le rsultat de ce traitement est enregistr dans une variable et rutilis dans la boucle.
Les boucles n'ont pas toujours besoin d'tre excutes en totalit. Par exemple, si vous recherchez un lment dans un tableau, il faut sortir de la boucle ds que l'lment est trouv avec l'instruction break; inutile de continuer la recherche jusqu'au dernier lment du tableau.


Entrons maintenant dans le vif du sujet, avec l'optimisation ct SQL.

Troisième édition Tout JavaScript chez Dunod

Tout JavaScript le livre chez DunodEn savoir plus
Sortie le 4 janvier 2023

Version papier 29€90
Format électronique 22€99.

Commandez en ligne

Chercher une fonction, un objet, ...

Le 30/09/2023 17:33:06 sur php7 en 16.9 ms