Fermer

janvier 13, 2021

Profilage des applications React avec l'API Profiler


Dans cet article, nous mesurerons les performances d'un exemple d'application React avec l'onglet Profiler dans React DevTools et le composant Profiler .

Vous venez de créer une toute nouvelle application React , mais vous souhaitez comprendre ses caractéristiques de performance avant de l'envoyer à vos clients. Bien que vous puissiez utiliser l'API User Timing du navigateur pour mesurer les temps de rendu de vos composants, il existe une meilleure alternative créée par l'équipe React: l'API Profiler et un Profiler onglet dans React DevTools .

L'API Profiler est la méthode recommandée pour mesurer les temps de rendu de nos composants, car elle est entièrement compatible avec des fonctionnalités telles que time-slicing et Suspense .

Dans cet article, nous mesurerons les performances de un exemple d'application React avec l'onglet Profiler dans React DevTools et le Composant Profiler .

Si nous travaillons sur notre application React en mode développement, nous pouvons utiliser l'onglet Profiler de React DevTools pour enregistrer des parties de son exécution, puis analyser tous les mises à jour effectuées par React. (Si nous voulons utiliser l'onglet Profiler sur une application de production, nous devons apporter quelques modifications à notre configuration .)

Pour profiler notre application, il suffit de changer dans l'onglet Profiler et appuyez sur le bouton Record pour démarrer le profilage:

 Démarrez le profilage en appuyant sur le bouton Record

Nous allons ensuite effectuer actions sur notre application et appuyez à nouveau sur le bouton Record pour arrêter le profilage. Les DevTools nous montreront chacune des mises à jour qui se sont produites pendant que nous enregistrions, en utilisant un diagramme de flamme sophistiqué:

 Arrêtez le profilage en appuyant de nouveau sur le bouton Enregistrer

Si vous n'êtes pas familier avec cette méthode de représentation des données de performance, vous vous demandez peut-être ce que signifient toutes ces barres colorées. Décomposons-le.

Chaque fois que l'un de nos composants effectue le rendu React compare l'arbre de composants résultant avec celui actuel. S'il y a des changements, React se chargera de les appliquer au DOM dans une phase appelée commit .

Les barres de couleur que nous voyons en haut sont des commits qui se sont produits pendant l'enregistrement. Les barres jaune / orange sont celles avec des temps de rendu plus élevés, donc nous devrions probablement y prêter une attention particulière:

 Commits effectués pendant l'enregistrement

Si nous cliquons sur l'un de ces commits, le tableau des flammes ci-dessous sera mis à jour, montrant les composants qui ont changé dans ce commit sous forme de barres horizontales. Plus la barre est longue, plus le rendu du composant prend du temps:

 Diagramme de flamme des temps de rendu des composants

Le graphique montre le composant racine en haut, avec ses enfants assis en dessous dans ordre hiérarchique. Le nombre affiché à l'intérieur de chaque barre représente le temps nécessaire pour rendre le composant et ses enfants. Lorsque nous voyons quelque chose comme RangeButtons (0,2 ms sur 1,8 ms) cela signifie que RangeButtons a pris 0,2 ms pour être rendu, tandis que RangeButtons plus son fils unique ] ButtonGroup a pris 1,8 ms. Cela signifie que ButtonGroup doit avoir pris environ 1,6 ms pour le rendu, ce qui est confirmé lorsque nous regardons la barre ci-dessous qui indique ButtonGroup (0,3 ms sur 1,6 ms) . ce que nous pouvons faire ici est de cliquer sur la barre pour un certain composant. Non seulement le diagramme de flamme se concentrera sur le composant sélectionné, mais le volet de droite nous montrera également combien de fois il a été rendu pendant la durée de vie de l'application:

 StockChart app commit times [19659004] L'onglet Profiler de React DevTools est un excellent moyen d'inspecter les performances de notre application sans avoir à modifier notre code. En enregistrant simplement les interactions clés, nous pourrons savoir où va le temps de rendu et identifier les goulots d'étranglement qui ralentissent notre application.

Utilisation du Profiler Component

Si nous voulons avoir du programmatique accès aux mesures de performances d'un composant spécifique, on peut utiliser le composant Profiler . Il encapsule une partie ou la totalité de notre arborescence d'applications et nous donne des métriques sur le temps qu'il a fallu à cet arbre pour s'afficher.

La première chose que nous devons faire pour utiliser le composant Profiler est de l'importer :

 import  React   { Profiler }   from   "react" ; 

The Profiler composant peut alors être utilisé pour envelopper n'importe quelle partie de notre arbre de composants:



 const   CustomStockChart   =  props  =>   {
   

   return   (
     ] < Profiler id  =  "StockChart"  onRender  =  { logTimes } > 
       < StockChart > 
         {} 
       < /  StockChart > 
     < /  Profiler > 
  )  ; 
} ; 

 const   logTimes   =   ( id [194590] 23] phase  actualTime  baseTime  startTime  commitTime )   => [19659026] {
  console .  log  ( ` $ { id }   's  $ { phase  }   phase: ` ) ; 
  console .  log  ( `Heure réelle:  $ { actualTime }  `  )  ; 
  console .  log  ( `Base time:  $ { baseTime }  `  )  ; 
  console .  log  ( `Heure de début:  $ { startTime }  `  )  ; 
  console .  log  ( `Commit time:  $ { commitTime }  `  )  ; 
} ; 

 export   default  CustomStockChart ; 

Lorsque CustomStockChart est rendu, le Profiler ] onRender callback sera invoqué avec un tas d'informations utiles. Dans notre exemple, il affichera quelque chose comme ceci sur la console:

 Phase de montage de StockChart:
Temps réel: 7.499999995867256
Heure de base: 7.1249999981955625
Heure de début: 384888.51500000054
Heure de validation: 384897,5449999998

Phase de mise à jour de StockChart:
Temps réel: 0,3500000038766302
Heure de base: 7.075000001175795
Heure de début: 385115.2050000001
Heure de validation: 385116.22499999974

La signification de chacun de ces arguments est expliquée dans la documentation de l'API Profiler . Dans le monde réel, au lieu de les enregistrer sur la console, vous les enverriez probablement à votre backend afin d'obtenir des graphiques agrégés utiles.

Quoi qu'il en soit, assurez-vous de passer du temps à comprendre ces deux nouveaux outils dans votre arsenal, car ils s'avéreront inestimables lorsque vous essayez d'identifier les problèmes de performances dans vos applications React!




Source link