Prêt à passer à l'étape supérieure ? Avec le Companion, vous pouvez déjà profiler des requêtes HTTP en GET, mais Blackfire est capable de profiler beaucoup plus de choses :
les requêtes AJAX ;
les requêtes HTTP de tout type (GET, POST, PUT, DELETE) ;
les scripts PHP utilisables en ligne de commande.
Pour ce faire, vous allez donc utiliser le Client Blackfire, un outil puissant et configurable, accessible dans l'invite de commande.
Profiler des requêtes HTTP avec le Client
Profilons à nouveau notre application, mais cette fois à partir de l'invite de commande, à l'aide de la commande blackfire curl http://localhost:8000/fr
:
![Exécution d'un profil à l'aide du Client Blackfire](https://user.oc-static.com/upload/2018/01/18/15162306935796_blackfire_curl.png)
Cette commande a effectué la même chose que le Companion, et nous pouvons voir le récapitulatif des métriques, ainsi que le lien vers le profil disponible sur la plateforme Blackfire.io.
Pourquoi Blackfire essaie-t-il d'exécuter des tests?
La réponse à cette question sera donnée un peu plus loin dans ce cours... ;)
Rien n'est magique, Blackfire a utilisé le logiciel cURL disponible sur votre machine pour effectuer la requête HTTP. Ce qui est bien, avec le logiciel cURL, c'est que l'on peut effectuer tout type de requête HTTP !
Profiler la validation d'un formulaire
Le grand intérêt d'avoir accès à des outils comme cURL est qu'il est tout à fait possible de récupérer, pour chaque requête HTTP, son équivalent en cURL dans la console de développement de votre navigateur !
Par exemple, éditez un des articles du projet de démonstration de Symfony et collectez l'appel cURL correspondant. Il faudra d'abord ouvrir la console de développement de votre navigateur et soumettre une première fois le formulaire pour que l'appel du formulaire en POST soit disponible dans l'onglet "réseau" :
![Récupération cURL d'une requête dans Google Chrome (édition d'un article en POST)](https://user.oc-static.com/upload/2018/01/18/15162448353932_curl.jpeg)
Puis, vous pouvez exporter la commande cURL correspondante dans les options (ici, c'est Google Chrome, mais ces fonctions sont également disponibles sur les autres navigateurs) :
![Capture d'écran explicative de l'export de l'appel cURL pour ré-utilisation dans Blackfire](https://user.oc-static.com/upload/2018/04/09/15232348830422_curl_call.jpeg)
Maintenant, à l'aide du Client, la requête devrait ressembler à cela :
blackfire curl 'http://localhost:8000/fr/admin/post/1/edit' -H 'Cookie: PHPSESSID=8arrp1f6pl2rm6a5t7e1m7v03i' -H 'Origin: http://localhost:8000' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' -H 'Content-Type: application/x-www-form-urlencoded' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' -H 'Cache-Control: max-age=0' -H 'Referer: http://localhost:8000/fr/admin/post/1/edit' -H 'Connection: keep-alive' --data 'post%5Btitle%5D=Lorem+ipsum+dolor+sit+amet+consectetur+adipiscing+elit+eee&post%5Bsummary%5D=Urna+nisl+sollicitudin+id+varius+orci+quam+id+turpis.+Pellentesque+vitae+velit+ex.+Ubi+est+barbatus+nix.+Lorem+ipsum+dolor+sit+amet+consectetur+adipiscing+elit.+Pellentesque+et+sapien+pulvinar+consectetur.+Mauris+dapibus+risus+quis+suscipit+vulputate.&post%5Bcontent%5D=Lorem+ipsum+dolor+sit+amet+consectetur+adipisicing+elit%2C+sed+do+eiusmod+tempor%0D%0Aincididunt+ut+labore+et+**dolore+magna+aliqua**%3A+Duis+aute+irure+dolor+in%0D%0Areprehenderit+in+voluptate+velit+esse+cillum+dolore+eu+fugiat+nulla+pariatur.%0D%0AExcepteur+sint+occaecat+cupidatat+non+proident%2C+sunt+in+culpa+qui+officia%0D%0Adeserunt+mollit+anim+id+est+laborum.%0D%0A%0D%0A++*+Ut+enim+ad+minim+veniam%0D%0A++*+Quis+nostrud+exercitation+*ullamco+laboris*%0D%0A++*+Nisi+ut+aliquip+ex+ea+commodo+consequat%0D%0A%0D%0APraesent+id+fermentum+lorem.+Ut+est+lorem%2C+fringilla+at+accumsan+nec%2C+euismod+at%0D%0Anunc.+Aenean+mattis+sollicitudin+mattis.+Nullam+pulvinar+vestibulum+bibendum.%0D%0AClass+aptent+taciti+sociosqu+ad+litora+torquent+per+conubia+nostra%2C+per+inceptos%0D%0Ahimenaeos.+Fusce+nulla+purus%2C+gravida+ac+interdum+ut%2C+blandit+eget+ex.+Duis+a%0D%0Aluctus+dolor.%0D%0A%0D%0AInteger+auctor+massa+maximus+nulla+scelerisque+accumsan.+*Aliquam+ac+malesuada*%0D%0Aex.+Pellentesque+tortor+magna%2C+vulputate+eu+vulputate+ut%2C+venenatis+ac+lectus.%0D%0APraesent+ut+lacinia+sem.+Mauris+a+lectus+eget+felis+mollis+feugiat.+Quisque%0D%0Aefficitur%2C+mi+ut+semper+pulvinar%2C+urna+urna+blandit+massa%2C+eget+tincidunt+augue%0D%0Anulla+vitae+est.%0D%0A%0D%0AUt+posuere+aliquet+tincidunt.+Aliquam+erat+volutpat.+**Class+aptent+taciti**%0D%0Asociosqu+ad+litora+torquent+per+conubia+nostra%2C+per+inceptos+himenaeos.+Morbi%0D%0Aarcu+orci%2C+gravida+eget+aliquam+eu%2C+suscipit+et+ante.+Morbi+vulputate+metus+vel%0D%0Aipsum+finibus%2C+ut+dapibus+massa+feugiat.+Vestibulum+vel+lobortis+libero.+Sed%0D%0Atincidunt+tellus+et+viverra+scelerisque.+Pellentesque+tincidunt+cursus+felis.%0D%0ASed+in+egestas+erat.%0D%0A%0D%0AAliquam+pulvinar+interdum+massa%2C+vel+ullamcorper+ante+consectetur+eu.+Vestibulum%0D%0Alacinia+ac+enim+vel+placerat.+Integer+pulvinar+magna+nec+dui+malesuada%2C+nec%0D%0Acongue+nisl+dictum.+Donec+mollis+nisl+tortor%2C+at+congue+erat+consequat+a.+Nam%0D%0Atempus+elit+porta%2C+blandit+elit+vel%2C+viverra+lorem.+Sed+sit+amet+tellus%0D%0Atincidunt%2C+faucibus+nisl+in%2C+aliquet+libero.&post%5BpublishedAt%5D=2017-02-18T21%3A58%3A47%2B01%3A00&post%5Btags%5D=adipiscing%2Cincididunt&post%5B_token%5D=dQTlFuyHBgEa5SYvZpblneTRQqJy4-Ufj5z3Z-amGF8' --compressed
Encore une fois, Blackfire fournira le lien vers le profil sur la plateforme pour vous permettre d'améliorer la performance de la gestion de vos formulaires.
Profiler des scripts en ligne de commande
PHP peut être exécuté sous forme de scripts utilisables via l'invite de commande. Dans ce cas, vous pouvez utiliser la commande run du Client Blackfire :
C:\Users\Mickaël> blackfire run php -r "echo('Blackfire is an awesome profiler');" Blackfire is an awesome PHP Profiler! Blackfire Run completed Graph URL https://blackfire.io/profiles/31e5d5c2-4402-400b-af86-48aba43513b2/graph No tests! Create some now https://blackfire.io/docs/cookbooks/tests No recommendations Wall Time 1.37ms CPU Time n/a I/O Time n/a Memory 35.2KB Network n/a n/a - SQL n/a -
Avoir la possibilité d'appeler php avec le Client Blackfire est intéressant, car vous pourriez, par exemple, profiler une suite de tests pour optimiser son exécution. Pour faire le lien avec le cours précédent sur les tests, vous pourriez par exemple tester la commande suivante :
blackfire run php ./vendor/bin/phpunit
En résumé
Le Client Blackfire nous offre encore plus de possibilités pour optimiser nos sites, mais également nos applications "console" réalisées en PHP :
profilage de tout type de requête HTTP ;
profilage de requêtes AJAX ;
profilage d'appels effectués en PHP ;
profilage d'applications console développées en PHP.
Maintenant que nous sommes capables de récolter toutes les informations nécessaires, nous allons pouvoir commencer à améliorer nos applications. Cela sera l'objet du chapitre suivant.
À très bientôt :D !