Sentry-javascript: [Call for Feedback] Roadmap zum Sentry JavaScript SDK v7

Erstellt am 13. Aug. 2020  ·  18Kommentare  ·  Quelle: getsentry/sentry-javascript

Hallo, Freunde!

Sentry hilft jedem Entwickler, seinen Code zu diagnostizieren und zu korrigieren. Wir planen, mit der Arbeit an einer neuen Hauptversion des JavaScript-SDKs zu beginnen und möchten es zu unserer bisher besten Software machen.

Dazu benötigen wir jedoch einige Rückmeldungen von Ihnen.

_Was sind die größten Schwachstellen bei der Verwendung des SDK?_
_Welche Funktionen vermissen Sie am meisten?_
_Was möchten Sie ändern?_

Wir planen bereits, einige der unten aufgeführten Probleme anzugehen:

  • Unterstützung für IE10 und offiziell veraltete Node-Versionen einstellen
  • Gesamtpaketgröße drastisch reduzieren
  • Machen Sie das SDK modularer
  • Verbessern Sie die Tree-Shaking-Kompatibilität
  • Überarbeitung von Integrationen/Erweiterungen, um mit mehreren Clients besser zu arbeiten

Helfen Sie uns, Ihnen zu helfen und teilen Sie uns Ihre Meinung mit! Wir werden sicherstellen, dass alle Kommentare beantwortet werden, damit jede Stimme zählt.

Beifall!
Kamila

Breaking Discussion

Hilfreichster Kommentar

Für mich ist das drastically reduce overall bundle size -Ziel auch das wichtigste.

Alle 18 Kommentare

Mein größter Kritikpunkt war immer, dass meine Fehlerprotokollierungsbibliothek eine meiner größten Drittanbieterbibliotheken ist. Ich habe oft überlegt, dass Sentry 5-10 Sekunden nach dem Laden der ersten Seite faul lädt, um eine bessere Seitengeschwindigkeit zu erzielen, daher freue ich mich sehr, dass Sie sich damit befassen ❤️

Für mich ist das drastically reduce overall bundle size -Ziel auch das wichtigste.

Hallo,

Gesamtpaketgröße drastisch reduzieren

Ich gebe +1, falls sich etwas ändert. Und ich füge folgendes hinzu: In meiner Web-App dauert die Sentry-Initialisierung 30 ms (auf einem schnellen Computer), was für einen Diagnose-Logger viel zu viel ist, und in der React Native-App ist es deutlich schlechter, weil der Bundler (Metro) ist nicht in der Lage, Bäume zu schütteln, daher importiert Sentry satte _78 Dateien_ und trägt auch messbar (einige %) zur Startzeit bei.

Hallo, nur ein paar Daten von React Native:

image

Dies wird auf einem iPhone X profiliert. Sentry benötigt beim Start satte 54 ms – ~40 nur zum Importieren des Großteils der Dateien, ~15 zum Initialisieren von JS-Code. Fügen Sie dazu ~ 30 ms hinzu, die den Hauptthread blockieren, um die _native_ Seite zu initialisieren, und es gibt einige Zeit, die beim Lexing / Parsen von Sentrys JS (von denen es viele gibt) nicht berücksichtigt wird - ich vermute 5-15 ms, habe aber nicht genau gemessen. Insgesamt - 90-100ms - das sind 15% der Gesamtzeit zum Starten meiner App!

Tolle Frage! Ich würde gerne flexiblere Protokollierungsoptionen (oder Anleitungen) für Produktions-Apps sehen, bei denen Sie den Benutzer keinen console.logs aussetzen möchten, diese jedoch als Breadcrumbs erfassen möchten. Dies könnte Probleme wie https://github.com/getsentry/sentry/issues/12618 und https://github.com/getsentry/sentry-javascript/issues/1883 lösen

Vielleicht könnten Sentry-Breadcrumbs in eine Protokollierungsbibliothek wie debug oder loglevel integriert werden . Dies scheint ein häufiger Anwendungsfall für Produktions-Apps zu sein und wird möglicherweise bereits mit einigen DIY-Ansätzen unterstützt, aber es ist nicht wirklich klar, ob dies basierend auf den aktuellen Dokumenten möglich ist. (Oder wenn es so ist und ich es irgendwie übersehen habe, dann wäre ich für Tipps dankbar). Danke!

Hallo, ich habe eine Empfehlung zur Initialisierung des SDK.

Anstatt Sentry.init mit Optionen aufzurufen, kann das SDK automatisch eine SentryOptions-wie eine benannte globale Variable überprüfen, um die DSN-ID und andere Optionen abzurufen.

Wir laden JS-Dateien bei Bedarf dynamisch und es ist schwierig, das Ladeereignis von Bundle-js bei domänenübergreifenden Anfragen oder Netzwerkproblemen zu verfolgen. Eine automatische Überprüfung dieser Variable wäre dabei hilfreich und es ist nicht erforderlich, ausschließlich die init-Funktion aufzurufen.

_SDK konnte die Ereignisanzeige nicht senden

Ich hätte gerne einen Hinweis darauf, dass capureEvent eine Anfrage nicht senden konnte - damit sie in die Warteschlange gestellt und später erneut versucht werden könnte.

Dies wäre für Offline-First-Apps (Progressive Web-Apps) sehr hilfreich.

Es gibt Situationen, in denen sich der Browser im Online-Zustand befindet, die Netzwerkanfrage jedoch aufgrund einer flockigen Verbindung/einer Zeitüberschreitung fehlschlägt (dh Reisen durch Gebiete mit schlechter Netzwerkabdeckung).

Es gibt eine Offline-Integration, die jedoch auf die Online- und Offline-Ereignisse angewiesen ist, was nicht ausreicht, um diesen Fall abzudecken.

Netzwerkfehler können dazu führen, dass Anwendungen, die eine solche Situation nicht berücksichtigen, Fehler ausgeben, die von Sentry nicht protokolliert werden und einfach im Leeren verschwinden.

Ich habe ein Projekt, bei dem es sich um eine PWA handelt, und ich erhalte keine Ereignisse, wenn die App offline ist, und es gibt keine Möglichkeit, eine Hintergrundsynchronisierung im Service Worker durchzuführen, da er nicht für die Sentry-Ingest-Domain registriert ist.

@edelvalle
Dies sollte mit Workbox und dem Hintergrund-Sync-Plugin möglich sein ~, habe es aber noch nicht getestet~
Es scheint gut zu funktionieren, auch das Ereignisdatum ist der Zeitpunkt, an dem der Fehler aufgetreten ist.

// service-worker.js
import { registerRoute } from 'workbox-routing'
import { NetworkOnly } from 'workbox-strategies'
import { BackgroundSyncPlugin } from 'workbox-background-sync'

registerRoute(
  new RegExp('^https://[^\\.]+\\.ingest\\.sentry\\.io/api/.*$'),
  new NetworkOnly({
    plugins: [
      new BackgroundSyncPlugin('project-name/sentry-event-queue', {
        maxRetentionTime: 7 * 24 * 60, // 7 days
      })
    ],
  }),
  'POST'
)

Hallo, ich liebe es zu sehen, dass drastically reduce overall bundle size geplant ist. Wir haben ein gatsby+preact-Projekt und Sentry nimmt ~28% unserer Hauptpaketgröße ein (27kb von 95kb). Wir versuchen, unser js-Bundle pro Seite unter 90 KB zu bringen, damit unsere App in ländlichen Gebieten mit schlechten Verbindungen besser funktionieren kann. Eine drastisch kleinere Sentry-SDK-Größe würde viel helfen.

Warum nicht auch die IE11-Unterstützung einstellen? Viele große Sites, einschließlich Microsoft, werden den Support für diesen Browser bis Ende des Jahres einstellen. Die Frage ist natürlich, ob sich dies wirklich auf die Größe der Bibliothek auswirkt.

@kamilogorek eine Idee, wann v6 kommen könnte?

Ich stimme auch @xr0master zu und denke, dass die IE-Unterstützung vollständig eingestellt werden sollte, einschließlich IE11 in der neuen Version.

Was sind die größten Schwachstellen bei der Verwendung des SDK?

  • Importieren. Aber ich denke, das passt gut zu "Tree Shakability" oder Modularität.
// This is not nice, as it doesn't get auto-completion when importing
import * as Sentry from '@sentry/browser'

// This is better, but has given me problems on Sentry 5.x
import { captureException } from '@sentry/browser'
  • Debuggen des Aufrufstapels. Es mag aus der Perspektive der Implementierung von Sentry offensichtlich sein, aber jedes console.log scheint von instruments.js:1 , was beim Debuggen nicht hilfreich ist. Da console.trace übertrieben ist, schreibe ich am Ende manuell Breadcrumbs in mein console.log , um Informationen darüber zu erhalten, was gerade protokolliert wird.

Welche Funktionen vermissen Sie am meisten?

Unterstützung für die Gesundheit .

Gibt es Pläne für die Verwendung von AsyncLocalStorage auf Node-Versionen, die dies unterstützen?

Also haben wir heute 6.0.0 , ohne größere Änderungen, außer dass standardmäßig Sitzungsdaten gesendet werden. cc @OmgImAlexis
Ich habe den Titel dieser Ausgabe in v7 geändert, was dies besser widerspiegeln sollte.

Es wäre großartig, die Framework-Integrationen getrennt von Sentry.init . Dies würde die Adresse #3232 , in die Vue träge geladen wird, und daher nicht garantiert werden, dass sie zum Zeitpunkt der Wachinitialisierung existiert. Etwas wie Sentry.configureVue(Vue) das zur Vue-Ladezeit aufgerufen werden kann.

React-Router-Integration, um das Laden und Entladen einer sekundären React-App innerhalb desselben Dokuments mit lazy-Aufruf zu unterstützen, wobei der eigene Router und spezifischere Routen verwendet werden

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen