ReportingObserver: Kodunuzun durumunu öğrenme

Özet

Kasabaya yeni bir gözlemci geldi. ReportingObserver, aşağıdakileri yapmanıza olanak tanıyan yeni bir API'dir: sitenizin kullanımdan kaldırılmış bir API kullandığını veya tarayıcı müdahalesi:

const observer = new ReportingObserver(
  (reports, observer) => {
    for (const report of reports) {
      console.log(report.type, report.url, report.body);
    }
  },
  {buffered: true}
);

observer.observe();

Geri çağırma, raporları arka uca veya analiz sağlayıcıya göndermek için kullanılabilir kullanabilirsiniz.

Neden yararlı? Şimdiye kadar, desteğin sonlandırılması Müdahale uyarıları, Geliştirici Araçları'nda yalnızca konsol mesajları olarak bulunuyordu. Özellikle müdahaleler, yalnızca gerçek dünyadaki çeşitli kısıtlamalar tarafından tetiklenir. bazı ayarlar vardır. Dolayısıyla bu iletileri hiç yerel olarak geliştirmede/test etmede yaygındır. ReportingObserver, olduğunu söylüyor. Kullanıcılar doğal ortamda potansiyel sorunlarla karşılaştıklarında, bilgilendirilmeyi tercih edebiliriz.

Giriş

Bir süre önce bir blog yayını yazmıştım ("Web uygulamanızı gözlemleme") Çünkü Google Analytics 4'te veri kaynaklarını izlemek için "öğeler" bunlar bir web uygulamasında gerçekleşir. Örneğin, veri merkezlerindeki DOM hakkında bilgi: ResizeObserver, IntersectionObserver, MutationObserver. Veri yakalamayı sağlayan API'ler vardır. performans ölçümleri: PerformanceObserver. Diğer Hatta window.onerror ve window.onunhandledrejection gibi API'ler hakkında bir şeyler ters gittiğinde kararlar verebilirsiniz.

Ancak, bu kontroller tarafından yakalanmayan başka uyarı türleri de vardır. API'lerden birini seçin. Siteniz desteği sonlandırılan bir API kullandığında veya çalıştığında bir tarayıcı müdahalesine karşın Geliştirici Araçları, Bunlar hakkında:

Geliştirici Araçları, kullanımdan kaldırma ve müdahalelerle ilgili konsol uyarıları sunar.
Geliştirici Araçları konsolunda tarayıcı tarafından başlatılan uyarılar.

Doğal olarak window.onerror ürününün bu uyarıları yakaladığı düşünülebilir. Böyle bir durum söz konusu değil! Bunun nedeni, window.onerror ürününün uyarılar için tetiklenmemesidir. tarafından oluşturulur. Çalışma zamanı hataları nedeniyle etkinleşiyor (JS istisnaları ve söz dizimi hataları).

ReportingObserver slack'ı seçiyor. Bu çözüm, herkesin kullanımdan kaldırma gibi tarayıcı tarafından yayınlanan uyarılar hakkında bilgilendirilir ve müdahaleler. Raporu rapor aracı olarak kullanabilir Kullanıcıların canlı yayınınızda beklenmedik sorunlarla karşılaşıp karşılaşmadığını merak ederek daha az uykunuzu kaybedersiniz girin.

API

API diğer "izleyici"den farklı değildir Bunun gibi API'ler IntersectionObserver ve ResizeObserver olarak. Müşteriyi geri ararsınız. size bilgi verir. Geri çağırmanın aldığı bilgi, sayfanın neden olduğu sorunların listesi:

const observer = new ReportingObserver((reports, observer) => {
  for (const report of reports) {
    // → report.type === 'deprecation'
    // → report.url === 'https://reporting-observer-api-demo.glitch.me'
    // → report.body.id === 'XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload'
    // → report.body.message === 'Synchronous XMLHttpRequest is deprecated...'
    // → report.body.lineNumber === 11
    // → report.body.columnNumber === 22
    // → report.body.sourceFile === 'https://reporting-observer-api-demo.glitch.me'
    // → report.body.anticipatedRemoval === <JS_DATE_STR> or null
  }
});

observer.observe();

Filtrelenmiş raporlar

Raporlar yalnızca belirli rapor türlerini gözlemleyecek şekilde ön filtre uygulayabilir:

const observer = new ReportingObserver((reports, observer) => {
  ...
}, {types: ['deprecation']});

Arabelleğe alınmış raporlar

buffered: true seçeneği, her bir arama teriminin Gözlemci oluşturulmadan önce oluşturulan raporlar:

const observer = new ReportingObserver((reports, observer) => {
  ...
}, {types: ['intervention'], buffered: true});

ReportingObserver. Gözlemci geç ekleniyor, ancak kaçırmayın.

Gözlemlemeyi durdur

Evet. Bu bir disconnect yöntemi vardır:

observer.disconnect(); // Stop the observer from collecting reports.

Örnekler

Örnek: Tarayıcı müdahalelerini bir analiz sağlayıcısına bildirme:

const observer = new ReportingObserver(
  (reports, observer) => {
    for (const report of reports) {
      sendReportToAnalytics(JSON.stringify(report.body));
    }
  },
  {types: ['intervention'], buffered: true}
);

observer.observe();

Örnek: API'ler kaldırılacağı zaman bildirim alın.

const observer = new ReportingObserver((reports, observer) => {
  for (const report of reports) {
    if (report.type === 'deprecation') {
      sendToBackend(`Using a deprecated API in ${report.body.sourceFile} which will be
                     removed on ${report.body.anticipatedRemoval}. Info: ${report.body.message}`);
    }
  }
});

observer.observe();

Sonuç

ReportingObserver, keşfetmeniz ve izlemeniz için ek bir yöntem sunar web uygulamanızdaki olası sorunlara dikkat edin. Hatta zaman çizelgesinin işleyiş şeklini anlamak için durumunu (veya eksikliğini) kontrol eder. Raporları arka uca göndererek Kullanıcıların sitenizde karşılaştığı gerçek sorunlar hakkında bilgi sahibi olun, güncelleyin kod, kâr!

Gelecekteki işler

Gelecekte ReportingObserver ürününün de fiili API olmasını umuyorum JS'deki her tür sorunu yakalamak için kullanılır. Her şeyi yakalayacak bir API hayal edin sorunu çözer:

  • Tarayıcı müdahaleleri
  • Kullanımdan kaldırmalar
  • Özellik Politikası ihlalleri. crbug.com/867471 adresine göz atın.
  • JS istisnaları ve hataları (şu anda window.onerror tarafından hizmet verilmektedir).
  • İşlenmemiş JS taahhütleri retleri (şu anda window.onunhandledrejection tarafından hizmet verilmektedir)

ReportingObserver ile entegre yürütülebilecek araçlar konusunda da heyecanlıyım. uygulayacaksınız. Lighthouse, bir dizi araca örnek olarak kullandığınızda, tarayıcı desteğinin sonlandırılmasının zaten işaretlendiğini "Kullanımdan kaldırılan API'lerden kaçınıyor" denetim:

Desteği sonlandırılan API&#39;lerin kullanımıyla ilgili Lighthouse denetiminde ReportingObserver kullanılabilir.
Desteği sonlandırılan API'lerin kullanımıyla ilgili Lighthouse denetiminde ReportingObserver kullanılabilir.

Lighthouse şu anda Geliştirici Araçları protokolünü kullanmaktadır konsol mesajlarını kazıyın ve bu sorunları geliştiricilere bildirin. Bunun yerine ReportingObserver sürümüne geçmek ilginizi çekebilir ve destek almak için kullanabileceğiniz, anticipatedRemoval tarih.

Ek kaynaklar: