Le Web Profiler est une application Symfony livrée avec le framework Standard Edition et disponible quand vous travaillez en environnement de développement. Il permet de collecter de nombreuses informations sur votre application durant son exécution : pour chaque requête utilisateur, le Web Profiler va créer un profil et l'application web fournit une interface soignée pour parcourir les informations de ce profil.
Le Web Profiler fournit également une barre de développement qui rassemble les informations les plus importantes sans avoir à accéder à l'application complète :
Nous voyons déjà apparaître quelques métriques utiles pour mesurer la performance :
le temps de rendu de la page (281 ms) ;
la consommation de mémoire (8.0 Mb) ;
le nombre d'appels au cache ;
le temps de rendu des blocs Twig...
Découverte de l'interface du Web Profiler
En cliquant sur la barre de développement en bas, nous accédons aux différents onglets du Web Profiler :
Il est possible de rechercher parmi les derniers profils créés par le Profiler, ou encore de rechercher les profils selon certaines informations (url, méthode HTTP, date de création...).
Maintenant, accédons plus particulièrement à la partie qui nous intéresse, l'onglet Performance :
Ce que l'on y voit est déjà très intéressant et permet de comprendre comment fonctionne une application Symfony :
L'application reçoit une requête utilisateur.
Si une route est disponible et autorisée, on appelle le contrôleur correspondant.
Le contrôleur est exécuté et retourne une réponse.
Enfin, le Web Profiler est exécuté et rajouté à la réponse produite et rendue à l'aide de Twig.
Cet onglet permet d'adapter le résultat en agissant sur le "treshold", c'est-à-dire le seuil d'enregistrement minimum d'une action du framework, en fonction de son temps d'exécution. Vous pouvez réduire le seuil à 0 pour voir tout ce que le Web Profiler est déjà capable d'enregistrer :).
Un premier exemple
Et si l'on modifiait l'action de contrôleur responsable du rendu de cette page pour exécuter - disons - une tâche très lente ?
<?php
// src/AppBundle/Controller/DefaultController
/**
* @Route("/", name="homepage")
*/
public function indexAction(Request $request)
{
// 10 secondes d'attente !
sleep(10);
return $this->render('default/index.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
]);
}
Dans l'onglet Performance du Web Profiler, on peut vérifier que c'est bien le contrôleur qui a besoin de 10 secondes pour être exécuté. C'est simple, mais vous avez compris le principe : le profileur collecte des informations tout au long de la génération d'une page par le framework Symfony, et affiche des informations utiles pour chaque requête.
En résumé
Le framework Symfony est fourni avec le Web Profiler activé en mode de développement.
L'onglet Performance donne des informations sur toutes les étapes de génération d'une page Symfony.
Il est possible d'éditer le seuil d'enregistrement pour affiner la granularité des informations disponibles.
Le Token du profil généré est toujours disponible dans les en-têtes de la requête HTTP.
Cela étant dit, cette information ne nous est pas très utile, car si nous avions 5 ou 6 tâches exécutées dans le contrôleur, nous n'aurions aucun moyen de savoir laquelle est responsable du problème de performance :-°. Mais ce problème sera résolu dans le chapitre suivant, quand nous créerons nos propres entrées dans l'onglet Performance !