2009-10-27 4 views
2

(Je sais que certaines personnes déjà posé des questions sur le profil js, mais ce n'est pas ce que je dois, si je comprends bien les.)javascript profil dans Firefox

J'aimerais suivre l'exécution de javascript pour recueillir les informations de 1) quelle fonction est invoquée, 2) l'heure à laquelle la fonction est appelée, et 3) l'heure d'exécution de la fonction.

Je souhaite collecter les informations en ligne (sur le code déployé) mais pas en interne. Donc, le compromis doit être léger. Aussi, je ne veux pas ajouter manuellement une ligne avant et après où une fonction est invoquée. Cependant, ce serait génial s'il existe un moyen d'instrumentation dynamique du code.

Merci d'avance!

Répondre

3

Je ne pense pas qu'il existe un système par lequel JavaScript suivra automatiquement l'heure à laquelle une fonction démarre et l'heure à laquelle une fonction s'arrête. C'est probablement quelque chose que vous devrez ajouter vous-même. Si c'est ce dont vous avez besoin, vous pouvez envisager d'utiliser PHP pour servir votre JavaScript et utiliser une expression régulière pour trouver les débuts et les fins de chaque fonction avec une regex ou quelque chose comme ça.

Votre RegExp pourrait ressembler à ceci (non testé complètement, de sorte que vous aurez à expérimenter):

/function [A-Za-z_$][A-Za-z0-9_$]*{(.*?)}/i 

Une fois que vous avez accès à l'intérieur de la fonction, vous pouvez remplacer cette valeur avec la fonction de suivre son début et sa fin enroulés autour de la définition de la fonction d'origine. Cela a l'avantage de faire exactement ce que vous voulez, sans vous soucier de modifier le fonctionnement de votre code js. C'est alors quelque chose que le serveur va gérer entièrement.

Ou bien, au lieu d'appeler directement la fonction, utilisez une fonction d'emballage:

function wrapFunction(func, context, argList) 
{ 
    // Replace with however you are storing this. 
    console.log(new Date().getTime()); 
    func.apply(context, argList); 
    console.log(new Date().getTime()); 
} 

Ceci a l'avantage d'être beaucoup plus propre que d'avoir le serveur mettre à jour vos JS pour vous. Malheureusement, cela signifie également avoir à réécrire le JS manuellement.

Ma recommandation serait simplement d'adapter une syntaxe de journalisation et de l'utiliser. La plupart des enregistreurs afficheront un horodatage, un contexte, un niveau et un message spécifique. Si vous appelez simplement l'enregistreur au début et à la fin de la fonction, il fera exactement ce que vous cherchez. De plus, étant donné que beaucoup sont configurables, vous pouvez l'afficher sur la console JS dans Firefox, envoyer des informations au serveur ou les désactiver complètement si vous le souhaitez.

Il y a une liste de JS enregistreurs ici:

JavaScript loggers

Cela, malheureusement, vous avez besoin de mettre à jour manuellement tout, mais il semble que la façon la plus simple d'obtenir 90% de ce que vous cherchez hors de la boîte.

+0

Chris, Merci pour les suggestions! En attendant, je viens de trouver du code sympa qui est vraiment inspirant. Jetez un oeil à ici: http://gist.github.com/189144 – Paul

1

Peut-être que le profileur dans FireBug peut vous aider à traquer les fonctions lentes.

Here's a video détaillant les options de profilage. (Index: 3:20).