Le Flame Chart affiche l'état de la pile JavaScript de votre code à chaque milliseconde durant le profil de performance.
Cela permet de savoir exactement quelle fonction s'est exécutée à un moment donné dans l’enregistrement, combien de temps elle a mis, et d'où elle a été appelée.
L'Arbre d'appel et le Flame Chart sont tous deux utilisés pour analyser les performances du code JavaScript de pages web. Et ils utilisent tous deux les mêmes données : des échantillons de la pile du moteur JavaScript, pris périodiquement durant l'enregistrement.
Cependant, tandis que le Call Tree organise ces données pour mettre en évidence les endroits où le code passe le plus de temps, de manière cohérente à travers tout l'enregistrement, le Flame Chart lui utilise ces données pour afficher où exactement dans l'enregistrement les fonctions s'exécutent. Essentiellement, il affiche l'état de la pile d'appel à n’importe quel point donné de l'enregistrement.
Voici une capture d'écran montrant le Flame Chart pour une section d'un profil :
Tout d'abord, vous pouvez remarquer que dans le panneau de vue globale de l'enregistrement. Ici, une petite partie de l'enregistrement est sélectionné et affiché dans le Flame Chart. Le Flame Chart affiche beaucoup de données, donc pour obtenir des résultats pertinents, il est souvent nécessaire de zoomer.
Dans la vue du Flame Chart, l'axe X représente le temps. La capture d'écran couvre la période de 1435ms à un peu plus de 1465ms. Sur l'axe Y, on trouve les fonctions de la pile d'appel à ce point dans le temps, avec le haut niveau en haut, et les fonctions filles en bas. Les fonctions ont un code couleur pour pouvoir les distinguer facilement.
Cela fournit une façon de savoir à tout moment de l'enregistrement quelles fonctions sont exécutées, quand et pendant combien de temps, et également d'où elles ont été appelées.
Zoomer et faire un panoramique
Pour travailler efficacement avec le Flame Chart, il est nécessaire de pouvoir naviguer dedans. Il existe deux contrôles principaux pour naviguer dans le Flame Chart :
Zoom : Augmente/diminue la portion du profil sélectionné qui est affiché dans le Flame Chart |
1) Souris : mollette vers le haut ou vers le bas dans le Flame Chart. 2) Pavé tactile : deux doigts vers le haut ou vers le bas dans le Flame Chart. |
Déplacement : Déplace la portion du profil sélectionné qui est affiché dans le Flame Chart |
1) Clic puis glissement de la partie sélectionnée dans le panneau de la vue d'ensemble de l'enregistrement. 2) Clic puis glissement n'importe où dans le Flame Chart (attention, cliquer dans le panneau de vue d'ensemble à l’extérieur de la partie sélectionnée entraînera une nouvelle sélection) |
Exemple
Afin de voir comment le Flame Chart peut révéler le comportement d'un programme, nous utiliserons cet exemple simple. Nous utilisons le même programme dans la page de L'Arbre d'appel. Il s'agit d'un programme qui compare trois algorithmes de tri différents. Il existe une page séparée qui fournit une vue d'ensemble de la structure du programme.
Nous utiliserons le même profil que celui utilisé sur la page de l'Arbre d'appel. Le graphique d'appel et le nombre d'échantillons associé ressemblent à ceci :
sortAll() // 8 -> sort() // 37 -> bubbleSort() // 1345 -> swap() // 252 -> selectionSort() // 190 -> swap() // 1 -> quickSort() // 103 -> partition() // 12
Tout d'abord, sélectionnons toute la partie durant laquelle le programme était actif :
L'appelsortAll()
, tout en haut et coloré en mauve court du début du programme à la fin. En dessous, on trouve en couleur olive les appels que cette fonction fait à sort()
. Encore en dessous, comme les dents d'une scie, on trouve les appels à chacun des algorithmes de tri.
Zoomons un peu :
Cette partie dure à peu près 140ms, et montre plus de détails sur les fonctions appelées par sort()
. Le code de sort()
est celui-ci :
function sort(unsorted) { console.log(bubbleSort(unsorted)); console.log(selectionSort(unsorted)); console.log(quickSort(unsorted)); }
Les boites intitulées "bubb..." et colorées en vert olive sont vraisemblablement des bubbleSort()
. Les boites colorées en vert sont vraisemblablement les autres fonctions de tri. Même au premier regard, il parait évident que les boites du tri à bulle sont bien plus grosses (et donc durent plus longtemps) que les autres.
Nous pouvons également voir quelques fonctions appelées par bubbleSort()
, en violet.
Zoomons une deuxième fois :
Cette partie dure environ 20ms. Nous pouvons voir que les boites violettes en dessous de bubbleSort()
sont les appels à swap()
. Si voulions tous les compter, l'Arbre d'appel nous dirait facilement qu'il en existe 253 (le nombre d'échantillons pris dans cette fonction) . Tous les échantillons dans cette portion sont en dessous de bubbleSort()
, mais l'on peut voir dans l'arbre d'appel que le profil contient un appel dans selectionSort()
.
Nous pouvons également voir que deux des boites vertes correspondent à selectionSort()
et quickSort()
, mais que les autres boites vertes correspondent à des appels à la plate-forme Gecko. Il est très probable qu'il s’agisse des console.log()
dans sort()
.