JS: Simple Error Handling
Error-Handling für Javascript ist derzeit bei mir und meiner Umgebung ein viel diskutiertes Thema. Die Frage ist dabei: Wie fängt man die Fehler ab und loggt sie mit und das alles am besten noch so, dass die Performance nicht darunter leidet.
Der Königinnenweg ist mir dabei noch nicht ganz gekommen. Aber zwei Dinge sollte man von vorneherein schonmal machen, um Fehler einzugrenzen, abzufangen, wegzutun:
1. Alle Javascriptfehler global unterdrücken:
window.onerror=function(msg, url, linenumber){
//request starten um fehler wegzuloggen
return true;
}
Dies bewirkt, dass der User auch noch weiter klicken kann, selbst wenn irgendwo ein Semikolon im Js-Code gefehlt hat. Die drei Parameter msg, url und linenumber geben dabei genauer Auskunft darüber, was genau wo passiert ist.
Diese Info könnte man jetzt bspw. über einen xh-request irgendwo an den Server schicken und wegloggen.
2. Ajax-Request-Fehler abfangen
onreadystatechange = myonreadystatecallback
In der myonreadystatecallback kann man dann die verschiedenen Stati des Requests reagieren und gegebenenfalls die Response-Fehler auswerten und wegloggen. Das ganze kann dann so aussehn:
xhr.onreadystatechange = function() {
if(xhr.readyState == 4 //4 = request fertig) {
if(xhr.status != 200) {
//request starten um fehler wegzuloggen
}
}
}
Da der Post ja Simple Error Handling heißt, soll es das auch erstmal gewesen sein. In großen Projekten ist es natürlich sinnvoll für beide Lösungen eine globale Error-Klasse zu schreiben, die sich um die Behandlung kümmert.
Sowas behandlen wir dann vielleicht besser in einem Advanced Error Handling Post
. Denn das Thema kann man bis zur Erschöpfung diskutieren und behandeln.
Insgesamt ist es aber so, dass man mit diesen beiden kleinen Lösungen schonmal jede Menge schaffen kann.
Kurzzeitig hab ich mal gedacht, dass es auch ne gute Idee wäre, um alles im Javascript ein try….catch drumzupacken und im catch dann den Fehler wegzuloggen. Mir wurde dann aber recht schnell klar (gemacht), dass dies sehr zur lasten der Performance geht und vor allem versucht wird die Fehler des Entwicklers abzufangen. Und der soll ja eigentlich gar nicht erst welche machen (jslint will hurt your feelings? joa…aber helfen tuts scho…)
