JavaScript hata yönetimi için en iyi uygulamalar nelerdir?


JavaScript'imi biraz daha hataya dayanıklı hale getirmeye başlamak istiyorum ve try, catch, finally ve throw kullanımıyla ilgili çokça dökümantasyon buluyorum, ancak hataların ne zaman ve nerede fırlatılması gerektiği konusunda uzmanlardan çok fazla tavsiye bulamıyorum.

  • Her kod parçası try/catch içine mi alınmalı?
  • Hataların ne zaman yakalanması gerektiği konusunda böyle daha fazla tavsiye var mı?
  • Üretimde kodun sessizce hata vermesi yerine hataları yükseltmenin dezavantajları var mı?
  • Bu, uygulamalar açısından SO'da ele alındı, ama sunucu günlükleme JS hataları etkili bir strateji mi?
  • Uygulamamdaki hataları yakalamayla ilgili olarak bilmem gereken başka bir şey var mı?

Ayrıca, harika bölümleri olan ya da hata yönetimi konusunda derinlemesine açıklamalar içeren kitapları duymaya tamamen açığım. Eloquent JavaScript bu konuya değiniyor, ama mesele hakkında çok önerici veya fikir beyan eden bir yaklaşımı yok.

Verebileceğiniz herhangi bir tavsiye için teşekkürler!

Cevap #1

Kurumsal JavaScript Hata Yönetimi üzerine son derece ilginç bir slayt seti şuradan bulunabilir: https://web.archive.org/web/20140126104824/http://www.devhands.com/2008/10/javascript-error-handling-and-general-best-practices/

Kısaca özetler:

  1. Kodunuzun başarısız olacağını varsayın
  2. Hata kayıtlarını sunucuya gönder
  3. Hataları tarayıcı değil, siz yönetirsiniz
  4. Hataların nerede olabileceğini belirleyin
  5. Kendi hatalarını yap
  6. Ölümcül ve ölümcül olmayan hataları ayırt edin
  7. Bir hata ayıklama modu sağlayın

Slaytlar çok daha fazla ayrıntıya giriyor ve muhtemelen size biraz yön verecektir.

DÜZENLEME:

Yukarıda bahsedilen sunum şurada bulunabilir: https://www.slideshare.net/nzakas/enterprise-javascript-error-handling-presentation

Cevap #2

Yahoo! ile tanınan Nicholas Zakas, Ajax Experience 2008'de Kurumsal Hata Yönetimi (slaytlar) üzerine bir konuşma yaptı ve bu konuşmada şöyle bir şey önerdi:

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;
}

Bir yıl sonra, Nicholas Zakas blogunda, üretim ortamınıza hata yakalama kodunu otomatik olarak enjekte etmek için akıllıca bir desen içeren bir güncelleme paylaştı (yönelimli programlama kullanarak).

window.error çağrılarını kaydetmeye başladığınızda, iki şeyi fark edeceksiniz:

  1. Siteniz oldukça karmaşıksa, çok hata kaydedeceksiniz
  2. Bir sürü işe yaramaz "window.error in undefined:0" mesajları göreceksiniz

Sunucuya günlüğe kaydetmeden önce şiddeti ve/veya rastgele bir sayıyı test etmek kadar basittir, günlük kayıtlarının selini azaltmak:

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);
}

Kullanışsız window.error in undefined:0 hatalarını yönetmek, site mimarinize bağlıdır, ancak tüm Ajax çağrılarını belirlemeyi ve bir şeyler başarısız olduğunda bir istisna fırlatmayı deneyebilirsiniz (muhtemelen stacktrace.js kullanarak bir yığın izi döndürerek).

İlgili makaleler