2010-06-19 5 views
7

J'écris un logiciel JavaScript assez volumineux. J'ai besoin de suivre les appels, de consigner les événements, de déboguer les actions, tout en maintenant les performances et la portabilité entre les navigateurs. Web12 et Firebug offrent tous deux un objet console avec des méthodes comme trace(), log(), error(), warning(), etc. Ils sont géniaux, mais que faire quand le navigateur est IE ou Opera? Imaginez que vous ayez une grosse application, vous voulez sûrement voir toutes les initialisations qu'elle fait, les événements qu'elle crée, etc. Toutefois, si je ne fais que les enregistrer, la journalisation ne fonctionnera pas dans les navigateurs qui n'ont pas de console enregistrée dans le DOM. Je pourrais créer un objet emballage:Stratégies pour JavaScript console.log/trace, etc

MyNamespace.Console = {}; 
MyNamespace.Console.log = function(value) { 
if (console!==undefined) { 
    console.log(value); 
} 
else { 
    // What should I do to log events on other browsers? 
} 
} 

Le fait ci-dessus donc pas de problème sur IE/Opera, mais comment puis-je me connecter avec IE (dont on a besoin vraiment vous connecter avec IE!).

De plus, si je plante des journaux partout dans mon application, est-ce que cela ralentit quand ils sont exécutés dans un environnement de production? Devrais-je avoir un switch DEBUG on/off et une simple vérification avant de l'enregistrer si DEBUG === true, alors se connecter?

Qu'en est-il des systèmes comme Closure Compiler, pouvez-vous les faire pour supprimer la journalisation? Que se passe-t-il si une erreur survient dans l'environnement de production et que la journalisation n'a pas eu lieu? Comment déboguez-vous/trouvez-vous le problème? En fait, envoyez-vous des fichiers d'erreur JavaScript (développeur) pour vous assurer que vos clients n'ont pas de problèmes? Comment cela fonctionne-t-il? J'apprécie tous les commentaires/commentaires sur le débogage/connexion avec JavaScript, c'est la première fois que j'écris une application JavaScript énorme, et franchement, je ne suis pas sûr de ce que je devrais faire à ce sujet ... le débogage et la connexion en JavaScript semble un peu inachevé.

Répondre

4

Je ne recommanderais pas d'avoir les données de rapport de l'application de retour au développeur — au moins pas sans d'abord divulguer cela aux utilisateurs/clients. Il serait plus prudent de consigner les erreurs/événements/les données de débogage dans une matrice, comme le suggère Anurag, puis d'envoyer périodiquement les données du journal au serveur Web où elles peuvent être stockées localement et recyclées.Puis si le client a des problèmes, ils peuvent remonter les journaux eux-mêmes pour le débogage et, soit, vous l'envoyer manuellement, ou explicitement dire à l'application de transférer les journaux à vous, le développeur.

La journalisation sur la console est généralement utilisée pendant le développement. Et un drapeau de débogage devrait être utilisé pour cela afin qu'il ne soit pas allumé à tout moment.

3

Vous pouvez simplement ajouter tous les messages de journal à un tableau ou à un objet. Un objet pourrait ressembler à:

var logMessages = { 
    'log': [], 
    'debug': [], 
    'error': [], 
    ... 
}; 

où le tableau représente des messages enregistrés pour ce niveau, classés par ordre chronologique ou en utilisant d'autres critères.

Vous pouvez simplement définir des interfaces identiques pour les navigateurs dépourvus de console à ceux qui en disposent. Par exemple,

if(!window.console) { 
    var console = {}; 

    console.log = function(msg) { 
     .. 
    }; 

    console.debug = function(msg) { 
     .. 
    }; 

    .. 
} 

La liste des messages peut être synchronisé avec un serveur, que je suppose ne peut être nécessaire pour les erreurs, et éventuellement des avertissements. Pour attraper toutes les erreurs sur la page, la configuration d'un rappel sur window:

window.onerror = function() { 
    .. 
}; 

et à l'intérieur du rappel, rapport au serveur. Cela peut ne pas jouer très bien avec Opera. Voir javascript-global-error-handling

3

Faites une recherche google pour la console accord redbird.

Redbird permet la journalisation à distance directement à partir de n'importe quel navigateur compatible avec les normes utilisant du JavaScript pur. Il n'a pas d'impact sur votre service web et devrait fonctionner sur Safari, Firefox, Chrome, Opera, MSIE, Smartphones, etc.

Redbird est pratique pour déboguer du code qui fonctionne bien dans un navigateur mais fait quelque chose de différent dans un autre. Une manière courante de consigner et d'agréger les messages sur différents navigateurs aide à identifier les différences. L'utilisation d'un drapeau DEBUG comme vous avez suggéré est une bonne idée.

Beaucoup de messages de débogage peuvent ralentir les choses dans un environnement de production. Une autre option pour l'environnement de production consiste à remplacer la fonction de consignation par une fonction nulle, c'est-à-dire une fonction qui ne fait rien. Cela évite d'avoir beaucoup d'instructions DEBUG dans le code.

Questions connexes