Was sind die besten Praktiken für die JavaScript-Fehlerbehandlung?
Ich bin auf der Suche, um meine JavaScript-ein bisschen mehr Fehler Beweis, und ich finde jede Menge Dokumentation über die Verwendung der try
catch
finally
und throw
aber ich bin nicht der Suche nach eine Tonne von Tipps von Experten, Wann und wo Fehler auslösen.
- Sollte jedes Stück code, eingewickelt in ein try/catch?
- Gibt es weitere Tipps, wie diese aufan welchem Punkt Fehler sollten abgefangen werden?
- Gibt es Nachteile bei der Aufzucht Fehler anstatt code fehl in der Produktion?
- Diesem berührt worden ist auf SO dass so weit wie Implementierungen, aber die haben server-logging JS-Fehler eine wirksame Strategie?
- Was Sie sonst noch wissen sollten, bezüglich trapping Fehler in meiner Anwendung?
Ich bin auch völlig Spiel für die Anhörung von Büchern, die großen Kapitel oder ausführliche Erläuterungen zu Fehler-handling. Eloquent JavaScript berührt die Frage, aber ist das nicht sehr verordnenden oder rechthaberisch über das Thema.
Vielen Dank für jeden Rat können Sie geben!
InformationsquelleAutor der Frage Joshua Cody | 2011-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine ungemein interessante Reihe von Dias auf die Enterprise-JavaScript-Fehlerbehandlung finden Sie unter http://www.devhands.com/2008/10/javascript-error-handling-and-general-best-practices/
Kurz, er fasst zusammen:
Folien gehen in viel mehr detail und wird wahrscheinlich geben Ihnen eine Richtung.
UPDATE
Der Präsentation bereits erwähnt kann hier gefunden werden:
http://www.slideshare.net/nzakas/enterprise-javascript-error-handling-presentation
InformationsquelleAutor der Antwort cdmdotnet
Nicholas Zakas von Yahoo! fame hat einen Vortrag über Enterprise Fehlerbehandlung (Folien) bei Ajax Erfahrung 2008, in dem er vorschlug, so etwas wie dieses:
Ein Jahr später, Nicholas Zakas geschrieben ein update auf seinem blogdie eine clevere Muster zu injizieren error-handling-code, der automatisch auf Ihre Produktionsumgebung (über Aspekt-orientierte Programmierung).
Beim starten von log-Fenster.Fehler nennt, wirst du bemerken zwei Dinge:
Verringerung der Flut von log-Einträge ist genauso einfach wie die Prüfung für schwere und/oder eine Zufallszahl, bevor die Anmeldung an den server:
Handhabung des nutzlosen " - Fenster.Fehler undefined:0" Fehler hängt davon ab, Ihre Website-Architektur, aber versuchen kann identifizieren alle Ajax-Aufrufe und eine Ausnahme werfen, wenn etwas nicht funktioniert (möglicherweise Rückkehr einen stack-trace mit stacktrace.js).
InformationsquelleAutor der Antwort Jens Roland
IHMO, sollten Sie die Fehlerbehandlung in javascript, wie Sie auch in mehreren anderen Sprachen (AFAIK: Python, Java).
Zur besseren Lesbarkeit (und wahrscheinlich bessere Leistung, obwohl ich bin nicht sicher, es hat einen wirklich großen Einfluss hat), sollten Sie die Verwendung des try /catch-block, meist auf der folgenden Fälle :
Den Teil des Codes, den Sie wollen, wrap ist ein Schlüssel Teil des ganzen Algorithmus. Wenn es fehlschlägt, könnte es :
Wissen Sie, dass der code, den Sie schreiben ist nicht kompatibel mit jedem browser
Schließlich, javascript-Experten können auch andere Elemente geben.
meine 2 Cent zu der box,
Grüße,
Max
InformationsquelleAutor der Antwort JMax
Zusätzlich zu den anderen Antworten: ein wichtiger Schritt ist, um Kontext Daten verfügbar in JavaScript-Fehler-Objekten und in
window.onerror
Parameter der Funktion.Dinge wie den stacktrace (errorObject.Stapel), den Dateinamen, die Zeilennummer und die Spaltennummer.
Beachten Sie, dass jeder browser einige Unterschiede...also tun Sie Ihr bestes, um schöne Fehler.
Kann es sogar Probleme mit der console-Objekt selbst.
Ich benutze ein benutzerdefiniertes Fenster.onerror-Funktion-inspiriert durch diese eine und eine spezielle Funktion, um jede Spur, die standard-Fehler-Objekt inspiriert durch dieser code.
Ein weiterer guter Punkt ist, fügen Sie die version Ihrer web-Anwendung irgendwo in der Nähe der stacktrace (für schnelle und sichere kopieren und einfügen). Sie kann auch Fehler anzeigen mehr aggressiv (alert...) in der Entwicklung-Modus als Entwickler nicht ständig überwachen Sie die browser-Konsole und kann nicht sehen, einige der Probleme.
Auch verwenden, vermeiden Sie die Verwendung
throw 'My message'
verwendenthrow new Error('My message')
Sie können sogar benutzerdefinierte Fehler, Lesen dieser Artikel.Immer fügen Sie einige Kontext, um die Fehler (die version, die id des Objekts, einige benutzerdefinierte Nachricht, ...) und auch stellen Sie sicher, eine Unterscheidung zwischen externen Fehler (einige externen Daten oder Kraft, die Ihr system fail) und interne Fehler/Behauptungen (Ihr eigenes system Durcheinander), Lesen Sie über 'Design by contract'.
Hier ist ein guide.
Denken Sie auch an Allgemeine Fehlerbehandlung wie Abfangjäger Ihre libs und frameworks:
InformationsquelleAutor der Antwort Christophe Roussy