144 votes

Quelles sont les meilleures pratiques pour gérer les erreurs JavaScript ?

Je suis à la recherche pour commencer à faire mon JavaScript un peu plus à l'abri des erreurs, et je vais trouver beaucoup de documentation sur l'utilisation de l' try, catch, finally, et throw, mais je ne suis pas à trouver une tonne de conseils d'experts sur quand et où jeter les erreurs.

  • Chaque morceau de code enveloppé dans un try/catch?
  • Il y a plus d'avis comme cela sur à quel point les erreurs devraient être pris?
  • Existe-il des inconvénients à la levée des erreurs au lieu d'avoir le code échoue silencieusement dans la production?
  • Cela a été touché sur sur pour autant que les mises en œuvre, mais le serveur de journalisation des erreurs JS une stratégie efficace?
  • Autre chose que je devrais savoir, concernant le piégeage des erreurs dans mon application?

Je suis aussi complètement le jeu pour l'audition de livres grands chapitres ou des explications détaillées de gestion des erreurs. Éloquent JavaScript touche sur la question, mais n'est pas très prescriptive ou d'opinions sur la question.

Merci pour tous les conseils que vous pouvez donner!

64voto

cdmdotnet Points 484

Un très très intéressant ensemble de diapositives sur l'Entreprise, la gestion des Erreurs JavaScript peut être trouvé à http://www.devhands.com/2008/10/javascript-error-handling-and-general-best-practices/

En sorte qu'elle résume

  1. Supposons que votre code suivant ne fonctionnera pas
  2. Journal des erreurs du serveur
  3. Vous, pas le navigateur, gérer les erreurs
  4. Identifier où des erreurs peuvent se produire
  5. Jetez vos propres erreurs
  6. Distinguer fatales et non fatales erreurs
  7. Fournir un mode debug

Les diapositives aller dans beaucoup plus de détails et sera très probablement vous donner une certaine orientation.

Mise à JOUR

La présentation mentionnés ci-dessus peuvent être trouvés ici: http://www.slideshare.net/nzakas/enterprise-javascript-error-handling-presentation

29voto

Jens Roland Points 19171

Nicolas Zakas de Yahoo! la renommée a fait un exposé sur l'Entreprise la gestion d'Erreur (diapositives) à l'Ajax de l'Expérience de 2008, dans lequel il a proposé quelque chose comme ceci:

function log(sev,msg) {
    var img = new Image();
    img.src = "log.php?sev=" +
        encodeURIComponent(sev) +
        "&msg=" + encodeURIComponent(msg);
}

// usage
log(1, "Something bad happened.")

// Auto-log uncaught JS errors
window.onerror = function(msg, url, line) {
    log(1, msg);
    return true;
}

Un an plus tard, Nicolas Zakas posté une mise à jour sur son blog, qui comprenait un astucieux modèle pour injecter du code de gestion d'erreur automatiquement sur votre environnement de production (à l'aide d'aspect-oriented programming).

Lorsque vous démarrez la fenêtre de connexion.erreur d'appels, vous allez remarquer deux choses:

  1. Si votre site est assez complexe, vous allez ouvrir un lot d'erreurs
  2. Vous serez en mesure de voir un tas de l'inutile "de la fenêtre.erreur undefined:0 messages

Réduire le torrent des entrées de journal est aussi simple que les tests de la gravité et/ou un nombre aléatoire avant de vous connecter au serveur:

function log(sev,msg) {
    if (Math.random() > 0.1) return; // only log some errors

    var img = new Image();
    img.src = "log.php?sev=" +
        encodeURIComponent(sev) +
        "&msg=" + encodeURIComponent(msg);
}

La manipulation de l'inutile "de la fenêtre.erreur undefined:0" erreurs dépend de l'architecture de votre site, mais il peut essayer d'identifier tous les appels Ajax et lancer une exception quand quelque chose tombe en panne (éventuellement retourner une trace de la pile à l'aide de stacktrace.js).

8voto

JMax Points 12956

IHMO, vous devez utiliser la gestion des erreurs en javascript, comme dans plusieurs autres langues (autant que je sache: Python, Java).

Pour une meilleure lisibilité (et probablement de meilleures performances, même si je ne suis pas sûr qu'il a vraiment un gros impact), vous devez utiliser le bloc try / catch pour la plupart dans les cas suivants :

  • La partie du code que vous voulez wrap est une des clés de la partie de l'ensemble de l'algorithme. Si elle échoue, elle peut :

    • créer des erreurs sur la partie suivante de codes (par exemple à cause d'une var est manquant...)
    • faire de la page regarde pas ce qu'attend (impact sur le contenu ou css)
    • les résultats paraître étrange à l'utilisateur (impact sur le comportement de code)
  • Vous savez que le code que vous écrivez est pas compatible avec tous les navigateurs

  • Vous avez prévu que le code peut échouer (car il n'y a pas d'autre moyen de vérifier qu'il devrait travailler en si...alors... blocs)
  • Et aussi quand vous voulez déboguer sans déranger l'utilisateur final

Finalement, javascript experts peuvent avoir d'autres éléments pour donner.

mes 2 cents sur la boîte

En ce qui concerne,

Max

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