• 15 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 8/25/20

Comprenez la notion de performance

Mesurer la performance d'une application, c'est mesurer l'utilisation des ressources matérielles mobilisées pour son exécution. Comme expliqué dans la présentation du cours, pour que le navigateur affiche une page web, nous faisons appel à de nombreux composants matériels : la mémoire vive, le processeur, mais également le réseau ou encore le disque dur.

Pour mesurer l'utilisation de ces différents composants matériels, nous pouvons analyser :

  • le temps d'exécution ;

  • l'utilisation mémoire ;

  • l'utilisation du système de fichier ;

  • l'utilisation du réseau.

Comment mesurer le temps d'exécution d'un script PHP ?

Il est tout à fait possible de retrouver cette métrique en PHP. Par exemple, vous pouvez calculer le temps d'exécution à l'aide de la fonction  microtime()  :

<?php

$avant = microtime(true);

// exécuter du code à profiler

$après = microtime(true);

var_dump($après - $avant); // en micro secondes

La valeur retrouvée comprend de nombreux temps d'exécution :

  • le temps d'exécution de toutes les fonctions appelées (temps inclus) ;

  • le temps d'exécution des appels au processeur (temps "CPU") ;

  • le temps d'exécution des appels au système de fichiers (temps "I/O") ;

  • le temps d'exécution d'éventuels services tiers : appels à la base de données, aux web services...

On distinguera donc deux temps d'exécution d'une fonction : inclusif et exclusif, selon que l'on mesure la fonction avec ses dépendances ou non.

Comment mesurer la quantité de mémoire vive consommée ?

La fonction  memory_get_usage()  indique la quantité de mémoire utilisée par PHP.  Nous pouvons adapter l'exemple précédent pour maintenant mesurer la quantité de mémoire vive utilisée par du code à profiler :

<?php

$avant = memory_get_usage(true);

// exécuter du code à profiler

$après = memory_get_usage(true);

var_dump($après - $avant); // en octets

La valeur retrouvée comprend la quantité actuelle consommée par PHP pour le code à profiler.  Le paramètre passé à la fonction permet de récupérer la vraie valeur utilisée par le système. Comme pour la fonction  microtime(), la quantité de mémoire comprend également la mémoire consommée par toutes les fonctions qui auraient pu être appelées. On peut également parler de quantité de mémoire inclusive ou exclusive.

En résumé

Si l'utilisation de  microtime()  et d'autres fonctions PHP est facile, cette approche a de nombreux défauts :

  • D'abord, c'est à vous de décider quelle partie de votre application vous souhaitez mesurer : par où commencer ?

  • Ensuite, c'est une action manuelle dans le code de votre application et vous devrez supprimer les appels à cette fonction après une session de profilage : combien de chances pour que l'on finisse par en oublier un et par déployer un bug en production ?

  • Le temps pouvant dépendre de nombreux facteurs, une seule mesure n'est pas suffisante et il faudra à chaque fois effectuer de multiples mesures pour être au plus près du temps d'exécution "standard".

  • Enfin - et c'est peut-être le problème le plus important -, cette mesure ne vous apporte aucune information pour améliorer la performance.

La bonne nouvelle, c'est que le framework Symfony est très bien outillé pour retrouver et mesurer ces métriques, et vous n'aurez jamais besoin de faire ce type d'action manuellement. Dans le prochain chapitre, nous allons découvrir un outil essentiel du développeur Symfony : le Web Profiler !

Example of certificate of achievement
Example of certificate of achievement