34 votes

Comprendre la sortie du profileur Firebug

J'ai essayé de l'utilisation de Firebug profiler pour mieux comprendre l'origine de certaines performances JavaScript questions que nous voyons, mais je suis un peu confus par la sortie.

Quand j'ai le profil du code de la profiler les rapports de Profil (464.323 ms, 26,412 appels). Je soupçonne que le 464.323 ms est la somme des temps d'exécution pour ceux 26,412 appels.

Cependant, quand j'ai consulter les résultats détaillés-je voir les résultats avec une moyenne de temps d'exécution supérieure à 464.323 ms, par exemple, le résultat avec la moyenne la plus élevée des rapports de temps les détails suivants:

Calls: **1**
Percent: **0%**
Own Time: **0.006 ms**
Time: **783.506 ms**
Avg: **783.506 ms**
Min: **783.506 ms**
Max: **783.506 ms**

Un autre résultat de rapports:

Calls: **4**
Percent: **0.01%**
Own Time: **0.032 ms**
Time: **785.279 ms**
Avg: **196.32 ms**
Min: **0.012 ms**
Max: **783.741 ms**

Entre ces deux résultats à la somme des résultats en Temps est beaucoup plus que 464.323.

Alors, que faire de ces divers chiffres signifient? Lesquels dois-je faire confiance?

25voto

Daniel Lew Points 39063

Chaque colonne a une description de ce que cela signifie que si vous définissez votre souris pour survoler dans Firebug. Je vais supposer que vous pouvez lire sur la façon dont chaque colonne fonctionne sur votre propre alors. Cependant, vous avez certainement venir à travers de drôles de comportement qui doit être expliqué.

Le temps propre est la quantité de temps passé à l'exécution de la fonction de code à l'intérieur de lui-même. Si les appels de fonction, pas d'autres fonctions, puis le temps devrait être la même que du temps. Cependant, si il y a des appels de fonctions imbriquées, puis le temps compte aussi le temps passé à l'exécution d'eux. Par conséquent, le temps sera presque toujours plus grand que leur propre temps, et dans la plupart des cas plus que le total du temps indiqué par le générateur de profils.

Toutefois, aucune seule fonction du temps doit être plus grand que la durée totale de la profiler connecté pour JavaScript appels. Ce problème est certainement un bug, et je peux voir pourquoi vous avez de la difficulté à faire confiance à Firebug quand il vous donne un tel paradoxal de sortie. Je crois que j'ai traqué la raison de ce bug se produit: AJAX.

Il semble que les appels AJAX sont à l'origine de colonnes que de compter les appels de fonctions imbriquées à signaler une information erronée. Ils finissent par comptage à la fois le temps d'exécution de JavaScript et de la demande au serveur.

Vous pouvez reproduire ce profiler bug en procédant comme suit:

  1. Aller à un site qui utilise AJAX. (J'ai utilisé http://juicystudio.com/experiments/ajax/index.php)
  2. Activer la Console/le débogage de Script.
  3. Allumez le générateur de profils.
  4. Faire un appel AJAX. (Plusieurs peuvent éclairer la question de plus.)
  5. Arrêter le générateur de profils, examinez la sortie.

Dans cet exemple, en ce qui concerne le temps contre temps, le temps propre de chaque fonction s'ajoute à la profiler total du temps, mais le temps de colonne intègre la quantité de temps que l'appel AJAX a eu de communication avec le serveur. Cela signifie que le temps de colonne est incorrect si vous êtes à la recherche de la vitesse d'exécution de JavaScript.

Il devient pire: depuis le temps, durée moyenne, min et max tous compter les appels de fonctions imbriquées, ils sont tous incorrecte si vous êtes en utilisant AJAX. En plus de cela, une fonction qui finalement utilise AJAX (dans une fonction imbriquée appel) également compte de leur temps de manière incorrecte. Cela signifie que tout un tas de fonctions de reporting des informations incorrectes! Afin de ne pas faire confiance à aucun de ces colonnes pour l'instant jusqu'à ce que Firebug résout le problème. (Il est possible qu'ils l'ont prévu le comportement de cette façon, même si c'est déroutant au mieux de laisser cela de cette façon.)

Si vous n'êtes pas à l'aide d'AJAX, puis une autre question est de savoir à jouer, faites-nous savoir si vous êtes ou non.

5voto

Gene Points 1222

Si je comprends bien les choses, cela ressemble à ceci:

Sur la première ligne, vous verrez que l'heure personnelle est "seulement 0.006ms". Cela signifie que même si le temps passé dans cette fonction était de 783,506 ms, il était en grande partie consacré aux fonctions appelées à partir de cette fonction.

Lorsque j'utilise Firebug pour optimiser le code, j'essaie de réduire le "temps propre" des fonctions appelées le plus souvent. (bien sûr, vérifier également si des appels de fonction inutiles sont supprimés)

5voto

Luis Melgratti Points 6297

De Firebug Tutoriel d'enregistrement, le Profilage et la ligne de commande (Partie II): (les exemples il y a des bonnes)

Les colonnes et la Description de Profiler

La fonction de la colonne : Il indique le nom de chaque fonction.
Appel de la colonne : Il indique le nombre de combien d'une fonction particulière a été invoquée.
Pour cent de la colonne : Il montre le temps de chaque fonction en pourcentage.
Colonne de temps : Il affiche la durée de l'exécution de point de départ d'une fonction au point de fin d'une fonction.
Avg colonne : Il montre la moyenne des temps d'exécution d'une fonction particulière. Si vous appelez une fonction qu'une seule fois, vous ne verrez pas la différence. Si vous appelez plusieurs fois, vous verrez la différence.
La formule pour la colonne est
Avg = Propre Ttime / Appel;
Min de la colonne et la colonne Max: Il montre le minimum de temps d'exécution d'une fonction particulière.
Colonne du fichier: le nom de fichier du fichier de la fonction.

2voto

user1460126 Points 11

À partir de ce que je comprends, c'est comment cela fonctionne... total profiler temps est la somme des 'Temps' de la colonne. Toutefois, vous pouvez remarquer que certains unique des valeurs de Temps peut être plus élevé que le total de profiler le temps. Ceux overtimes ont été consacrés à l'extérieur du JavaScript, par exemple. dans un plugin appel. Si votre fonction JS qui fait un plugin appel pour eg., et attend pour le module de la fonction de retour à la JS, ces temps d'attente ne seront PAS signalés par le nombre total de profiler de temps, mais sera inclus dans la colonne du Temps.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X